在我的Java程序中,我使用com.ibm.xml.enc.dom.Base64类进行编码/解码 二进制文件。我怎么知道这个类使用的Base64编码的变体是什么?
答案 0 :(得分:0)
你确实有几个base64的实现。
这种编码背后的想法是找到一种方法来通过不同的网络层传输原始字节,而不需要对它们进行更改。 每个层都在读取字节,并且您不希望剪切(损坏)原始数据,因为随机字节序列被解释为“结束请求”。这就是为什么应用程序数据被编码为可打印字符的原因。 (更多细节:http://www.comptechdoc.org/independent/networking/protocol/protlayers.html)
大多数Base64表使用A-Z,a-z和0-9表示62个第一个字符。实现之间的差异是最后2个字符和填充字符。
最常见的实现使用+和/表示表的最后两个字符。但是你也可能会发现 - 和_曾经是url-safe。
对于您的类com.ibm.xml.enc.dom.Base64,文档中未指定任何内容: https://www.ibm.com/support/knowledgecenter/en/SSYKE2_6.0.0/com.ibm.java.security.api.doc/xmlsec/com/ibm/xml/enc/dom/Base64.html#Base64()
因此,您可以假设他们使用Base64最常见的实现。如果您有疑问,只需尝试使用随机原始字节生成示例。您可以仔细检查base64是否使用+和/以及63和64个字符。
如果你需要编写一个通用的base64解码器,能够处理不同的bas64变体。您需要检查这些特殊字符,检查字符串的长度以及用于填充的字符。根据这些信息,您可以推断出要使用的实现。
您有关于维基百科上的变体的更多详细信息: https://en.wikipedia.org/wiki/Base64