59

My java application use base64 encoding which puts a new line (\n) after every 76 character. I need to put this encoded string in a properties file and the newline breaks the functionality.

When I do a encodedString.replaceAll("\n", ""); things are working fine, but I just want to make sure that this is expected and I am not introducing a hidden issue.

4

5 回答 5

62

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

而且由于您不需要换行符,因此如果可能的话,您根本不应该生成它们。

于 2013-11-19T07:51:01.733 回答
13

一些 Base64 编码器会将 EOL 字符(如 CRLF ('\r\n'))附加到编码的字符串中。您可以使用Base64.encodeBase64URLSafe摆脱它们:

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

于 2016-06-09T19:50:11.727 回答
6

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

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

将上面的行更改为以下内容

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

这将解决您的问题。

于 2020-09-10T07:39:00.417 回答
0

编码字符串.replaceAll("\n", "");

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

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

于 2021-05-30T03:34:09.830 回答
-4

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

于 2013-11-13T11:45:46.527 回答