在 Python 3 中使用 UTF-8 解码 VIEWSTATE 字符串
Decoding a VIEWSTATE string with UTF-8 in Python 3
我在解码 Python 3 中的 ASP.NET 视图状态字符串时遇到问题。
当我尝试使用 bash 的 base64
命令解码字符串时,它成功解码了字符串并且我能够看到我需要的所有信息(大部分是希伯来语,意思是 UTF-8 ).视图状态当然只是 base64 编码,没有加密。
但是,当我尝试使用 Python 的 base64
库解码字符串,然后将字节数组解码为 UTF-8 字符串时,我收到一条错误消息:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position
0: invalid start byte
我应该提到,由于字符串是视图状态,前几个字节是二进制数据,“0xff”有意义,但是在这些字节之后数据是可读的。
Python 3代码段:
b = "The_ViewState"
print(base64.b64decode(b).decode("utf-8"))
为什么解码在 bash 中有效,而在 Python 中无效?如何解决?
经过一些研究,我找到了答案:
b = "The_ViewState"
print(base64.b64decode(b).decode("utf-8", "ignore"))
添加 "ignore" 标志会导致 decode()
丢弃任何无效的字节序列,从而将不相关的字节留在解码字符串之外。
最好的方法是使用这个 link。
用于解码 ASP.NET 视图状态的小型 Python 3.5+ 库。
首先安装:pip install viewstate
>>> from viewstate import ViewState
>>> base64_encoded_viewstate = '/wEPBQVhYmNkZQ9nAgE='
>>> vs = ViewState(base64_encoded_viewstate)
>>> vs.decode()
('abcde', (True, 1))
我在解码 Python 3 中的 ASP.NET 视图状态字符串时遇到问题。
当我尝试使用 bash 的 base64
命令解码字符串时,它成功解码了字符串并且我能够看到我需要的所有信息(大部分是希伯来语,意思是 UTF-8 ).视图状态当然只是 base64 编码,没有加密。
但是,当我尝试使用 Python 的 base64
库解码字符串,然后将字节数组解码为 UTF-8 字符串时,我收到一条错误消息:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
我应该提到,由于字符串是视图状态,前几个字节是二进制数据,“0xff”有意义,但是在这些字节之后数据是可读的。
Python 3代码段:
b = "The_ViewState"
print(base64.b64decode(b).decode("utf-8"))
为什么解码在 bash 中有效,而在 Python 中无效?如何解决?
经过一些研究,我找到了答案:
b = "The_ViewState"
print(base64.b64decode(b).decode("utf-8", "ignore"))
添加 "ignore" 标志会导致 decode()
丢弃任何无效的字节序列,从而将不相关的字节留在解码字符串之外。
最好的方法是使用这个 link。
用于解码 ASP.NET 视图状态的小型 Python 3.5+ 库。
首先安装:pip install viewstate
>>> from viewstate import ViewState
>>> base64_encoded_viewstate = '/wEPBQVhYmNkZQ9nAgE='
>>> vs = ViewState(base64_encoded_viewstate)
>>> vs.decode()
('abcde', (True, 1))