【问题标题】:Decoding a VIEWSTATE string with UTF-8 in Python 3在 Python 3 中使用 UTF-8 解码 VIEWSTATE 字符串
【发布时间】:2015-03-26 17:31:57
【问题描述】:

我在 Python 3 中解码 ASP.NET 视图状态字符串时遇到问题。 当我尝试使用 bash 的 base64 命令解码字符串时,它成功解码了字符串并且我能够看到我需要的所有信息(其中大部分是希伯来语,意思是 UTF-8)。视图状态当然只是 base64 编码而不是加密。

但是,当我尝试使用 Python 的 base64 库对字符串进行解码,然后将字节数组解码为 UTF-8 字符串时,我收到一条错误消息:

UnicodeDecodeError: 'utf-8' 编解码器无法在位置解码字节 0xff 0:无效的起始字节

我应该提到,由于字符串是视图状态,前几个字节是二进制数据,“0xff”是有意义的,但是在这些字节之后数据是可读的。

Python 3 代码段:

b = "The_ViewState"
print(base64.b64decode(b).decode("utf-8"))

为什么解码在 bash 中有效,而在 Python 中无效?如何解决?

【问题讨论】:

  • 可能 Bash 忽略了它无法解码的字节,这在无效输入可能是错误的编程环境中不是一个好的选择。为什么不跳过前几个字节?
  • 但是,您没有分享您的 Bash 代码,也没有分享任何示例视图状态字符串。
  • 此外,视图状态包含一个完整的对象图,您需要实际解析这些二进制位以获取感兴趣的数据。
  • 简而言之,您需要为 Microsoft LOS 格式编写解析器;这不一定是微不足道的!起点见msdn.microsoft.com/en-us/library/…;二进制值可能是object type identifiers。

标签: python utf-8 base64 viewstate


【解决方案1】:

经过一番研究,我找到了答案:

b = "The_ViewState"
print(base64.b64decode(b).decode("utf-8", "ignore"))

添加“忽略”标志会导致decode() 丢弃任何无效的字节序列,从而将不相关的字节排除在解码字符串之外。

【讨论】:

    【解决方案2】:

    最好的方法是使用这个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))
    

    【讨论】:

      猜你喜欢
      • 2012-10-18
      • 1970-01-01
      • 2018-06-29
      • 2022-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-09
      相关资源
      最近更新 更多