【发布时间】: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。
-
除非你和他的编码字符串不同,这意味着要么你使用不同的编码,要么文件不同。