由 PBEWithMD5AndDES 提供的加密字符串,然后 Base64 编码是否包含 CR 和/或 LF 字符?
3 回答
Base64 只是可打印的字符。但是,当它用作电子邮件的 MIME 类型时,它会被分成由 CR-LF 分隔的行。
PBEWithMD5AndDES 返回二进制数据。PBE 加密在PKCS#5 标准中定义,该标准没有专用的 base 64 编码方案。所以问题就变成了你需要对哪个系统进行 Base 64 编码的二进制数据。Wikipedia在 Base 64 文章中有一个很好的部分,解释了各种形式。
您可能会遇到返回 Base 64 的 PBE 实现,并且该实现没有提及使用上述哪种方案。在这种情况下,您需要以某种方式找出使用哪种方案。我建议搜索它,询问社区,查看源代码,或者如果全部失败,则在输出上创建一组测试。
幸运的是,如果您正在解码 base 64 并且您忽略了所有空白,那么您是非常安全的。请注意,某些实现忽略了填充,因此在解码之前添加它(如果适用)。
如果您自己执行编码 base 64,我强烈建议不要输出任何空格,仅使用默认字母(带'+'
和'/'
符号)并始终在需要时执行填充。之后,您始终可以拆分结果并替换任何非标准字符(当然尤其是'+'
and'/'
符号),或删除填充。
我正在使用带有 Andorid SDK 的 java。我发现命令:
String s = Base64.encodeToString(enc, Base64.DEFAULT);
做了换行。它将 LF 字符放入输出字符串中。
我找到:
String s = Base64.encodeToString(enc, Base64.NO_WRAP);
没有将 LF 字符放入输出字符串中。