不幸的是,我不能发布字符串,因为它包含敏感数据。我创建了一个在我公司使用的API。我们有一个试图使用所述API的合作伙伴。在JSON的一部分中,我们期望一个base64编码的字符串是数字签名的XML文件。当我解析JSON并尝试解码Base64字符串时,API会抛出异常。
发生System.FormatException HResult = 0x80131537
Message =输入不是有效的Base-64字符串,因为它包含非基本64个字符,两个以上的填充字符或填充字符中的非法字符。源= mscorlib程序
堆栈跟踪:
中的Base64Decoding.Program.Main(String [] args)
在System.Convert.FromBase64_Decode(Char * startInputPtr,Int32 inputLength,Byte * startDestPtr,Int32 destLength)
在System.Convert.FromBase64CharPtr(Char * inputPtr,Int32 inputLength)
在System.Convert.FromBase64String(String s)
我尝试过使用原始XML并在3台不同的机器上编码,包括使用Python的Linux系统,我每次都得到完全相同的Base64字符串。我收到的字符串与他的字符串不匹配。
这是我们合作的唯一合作伙伴,它曾经遇到编码问题,无论我尝试过什么,我都无法复制编码签名XML文件的结果。当我尝试使用an online decoder解码他的Base64时,它会显示错误。但是,当我单击解码按钮时, 它实际上下载了正确解码的XML !
当我使用同一文件的编码字符串时,它不会显示错误,它会在“实时视图”框中显示已解码的XML,并在单击解码按钮时下载正确的XML。
有没有人知道什么可能导致System.Convert.ToBase64String()
输出带有感叹号的字符串?据我所知,不应该是Base64中允许的角色。我已经尝试过64位与32位,我已经尝试了.Net Framework的每个版本都回到了2.
答案 0 :(得分:0)
尝试替换每个感叹号字符“!”带有正斜杠字符“ /”。
我以前见过base64编码的数据,其中带有感叹号。通常,它嵌入HTML或打算嵌入HTML。大概是因为正斜杠在HTML中是句法上有意义的字符,并且因为base64编码的数据中可以包含正斜杠,所以所有正斜杠都已由感叹号代替。
我见过在javascript标签中嵌入了WebAssembly程序的人。
另外请注意,如果您有一段base64编码的数据,尤其是可能被截断的数据或仅是完整base64编码的字符串的一部分,并且框架为您提供了一个类似于上述的异常或如果说“ Base-64 char数组或字符串的长度无效”,则可以尝试从字符串末尾一个接一个地删除字符,并尝试每次对其进行解码(最多约4个字符,除此之外,它可能不是长度/填充问题),或者通过一对一地添加填充字符“ =”(等于符号),但不超过两次(总共两个等于,即“ ==”)。