可以删除Base64编码中的换行符

时间:2013-11-13 11:30:33

标签: java base64

我的java应用程序使用base64编码,它在每76个字符后面添加一个新行(\n)。我需要将这个编码的字符串放在属性文件中,换行符会破坏功能。

当我做encodedString.replaceAll("\n", "");事情工作正常时,我只是想确保这是预期的,我不会引入隐藏的问题。

5 个答案:

答案 0 :(得分:41)

对于许多无法处理长行的旧程序,必须将base64编码的字符串分成多行。用Java编写的程序通常可以处理长行,因为它们本身不需要进行内存管理。只要你的行短于6400万个字符就没有问题。

由于您不需要新行,如果可能,您根本不应该生成它们。

答案 1 :(得分:5)

某些Base64编码器将EOL字符(如CRLF('\ r \ n'))附加到编码字符串。您可以使用Base64.encodeBase64URLSafe删除它们:

  

使用base64算法的URL安全变体对二进制数据进行编码,但不会对输出进行分块。 url-safe变体发出 - 而_而不是+和/字符。注意:不添加填充。

答案 2 :(得分:1)

您只需要按以下方式使用Base64编码

Base64.encodeBase64String("Your data to encrypt in base64")

在行上方更改以下内容

Base64.encodeBase64String("Your data to encrypt in base64",Base64.NO_WRAP)

这将解决您的问题。

答案 3 :(得分:0)

encodedString.replaceAll("\n", "");

确实在 Java Mime 编码器中引入了一个“隐藏的问题”,我不得不解决它。

各行由 "\r\n" 分隔,而不仅仅是 "\n",因此您的替换将 "\r" 保留在某些地方,大多数程序都会忽略这些,但并非所有程序都会忽略这些内容。 例如,我在使用 GitHub API 时必须为文件生成包含 base42-mime 编码的 JSON,我只是在 encodingString.replaceAll("\n", "") 字符串前后添加 (") ...好吧..它没有工作,因为剩下的 \r...

答案 4 :(得分:-3)

这应该不是问题,因为许多解码器能够在没有换行符分隔符的情况下解码编码文本。最安全的选择是自己进行解码并验证它。