【问题标题】:Base64 encoded String that contains exclamation points causing exception包含导致异常的感叹号的 Base64 编码字符串
【发布时间】:2017-10-19 19:24:06
【问题描述】:

很遗憾,我无法发布该字符串,因为它包含敏感数据。我创建了一个在我的公司使用的 API。我们有一个合作伙伴正在尝试使用上述 API。在 JSON 的一部分中,我们期望数字签名 XML 文件的 base64 编码字符串。当我解析 JSON 并尝试解码 Base64 字符串时,API 会抛出异常。

System.FormatException 发生 HResult=0x80131537
Message=输入不是有效的 Base-64 字符串,因为它包含非 base 64 字符、两个以上的填充字符或填充字符中的非法字符。

来源=mscorlib

堆栈跟踪:
在 System.Convert.FromBase64_Decode(Char* startInputPtr, Int32 inputLength, Byte* startDestPtr, Int32 destLength)
在 System.Convert.FromBase64CharPtr(Char* inputPtr, Int32 inputLength)
在 System.Convert.FromBase64String(String s)
在 Base64Decoding.Program.Main(String[] args) 中

我尝试在 3 台不同的机器上获取原始 XML 并对其进行编码,包括使用 Python 的 Linux 系统,每次都得到完全相同的 Base64 字符串。我收到的字符串与他的字符串不匹配。

这是与我们合作的唯一一个遇到编码问题的合作伙伴,无论我尝试了什么,我都无法复制他对签名 XML 文件进行编码的结果。当我尝试使用an online decoder 解码他的 Base64 时,它会显示错误。但是当我点击解码按钮时,它实际上会下载正确解码的 XML

当我使用同一文件的编码字符串时,它不会显示错误,它会在“实时视图”框中显示解码的 XML,并在我单击解码按钮时下载正确的 XML。

有谁知道什么可能导致System.Convert.ToBase64String() 输出带有感叹号的字符串?据我了解,这不应该是 Base64 中允许的字符。我已经尝试过 64 位和 32 位,我已经尝试过将 .Net Framework 的每个版本恢复到 2。

【问题讨论】:

  • 您的链接已损坏,但为什么您认为将 Base64 提交到随机网页比发布到 Stack Overflow 更安全?
  • 如果您的编码字符串与客户的编码字符串不匹配。很明显,这是您客户的编码过程或他们将编码字符串传输给您的过程的问题......
  • 该在线页面上的细则似乎很有用:二进制数据解码...在实时模式下不起作用 - 也许他的 XML 包含一些不是的二进制字符在下载的文件中对您可见?
  • @NetMage 数据仅是敏感数据而非机密数据。我只是不希望人们能够轻松搜索和查找它。正如我所提到的,重新调整您的第二点,完全相同的 XML 文件的编码字符串可以工作并在预览中显示 XML。
  • 除非你和他的编码字符串不同,这意味着要么你使用不同的编码,要么文件不同

标签: c# encoding base64


【解决方案1】:

尝试替换每个感叹号字符“!”带有正斜杠字符“/”。

我以前见过带有感叹号的 base64 编码数据。通常它嵌入在 HTML 中或打算嵌入到 HTML 中。据推测,因为正斜杠在 HTML 中是一个具有语法意义的字符,并且因为 base64 编码的数据中可以有正斜杠,所以 所有正斜杠都被替换为感叹号。

我见过在 javascript 标签中嵌入 WebAssembly 程序的人这样做。

作为附加说明,如果您有一段 base64 编码数据,尤其是可能被截断的数据,或者只是完整 base64 编码字符串的一部分,并且框架会为您提供上述异常或以下异常说“Base-64 char 数组或字符串的长度无效”,您可以尝试从字符串末尾一个接一个地删除字符,每次尝试对其进行解码(最多大约 4 个字符左右 -除此之外,它可能不是长度/填充问题),或者通过一个接一个地添加填充字符“=”(等于符号),但不超过两次(总共两个等于,即“==”)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多