在 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))