Base64编码密钥时关于换行的几个问题。

发布于 2022-08-22 14:48:48 字数 1255 浏览 21 评论 4

在windows下一个javaweb应用,需要用http传递公钥pk。
一般是
String pk = BASE64ENCODER.encode(pkBytes);
base64编码时,每76个字母就要换行。
那么pk就应该是

PHBrZD5NSUlCcGpDQ0FSc0dDU3FHU0liM0RRRURBVENDQVF3Q2dZRUEvWDlUZ1IxMUVpbFMzMHFj
THV6azUvWVJ0MUk4NzBRQXd4NC9nTFpSDQpKbWxGWFVBaVVmdFpQWTFZK3IvRjlib3c5c3ViVld6
4dnFoUmtJbW9

这样的吧

如果我直接在jsp文件输出这个<%=pk%>或者写到xml中,没啥问题。
后来我改成用Spring的MarshallingHttpMessageConverter,注入org.springframework.oxm.castor.CastorMarshaller
然后就变成了

PHBrZD5NSUlCcGpDQ0FSc0dDU3FHU0liM0RRRURBVENDQVF3Q2dZRUEvWDlUZ1IxMUVpbFMzMHFj
THV6azUvWVJ0MUk4NzBRQXd4NC9nTFpSDQpKbWxGWFVBaVVmdFpQWTFZK3IvRjlib3c5c3ViVld6
4dnFoUmtJbW9

注意最后是
在unmarshall的时候就把换行给换成了空格。

PHBrZD5NSUlCcGpDQ0FSc0dDU3FHU0liM0RRRURBVENDQVF3Q2dZRUEvWDlUZ1IxMUVpbFMzMHF THV6azUvWVJ0MUk4NzBRQXd4NC9nTFpSDQpKbWxGWFVBaVVmdFpQWTFZK3IvRjlib3c5c3ViVld6 4dnFoUmtJbW9

那么pk就变了。

以上算是个背景。

问题:
1.base64编码(sun.misc.BASE64Encoder)编出来的换行都是\r\n么? 还是说因为我是winodws系统所以是\r\n?

2.

public static void main(String[] args) {
String a="abcd\nefgh\rjkl\r\nmndf";
System.out.println(a);
}

悲催的表示\n,\r,\r\n都可以换一行,这肿么办。 \n\r是换两行。
一般对于换行的情况都是怎么解决的?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

韶华倾负 2022-08-26 09:25:49
String pk = BASE64ENCODER.encode(pkBytes);
pk.replaceAll("\r\n","");

这样试试

指尖上得阳光 2022-08-25 22:00:10

base64 编码本来就不需要换行的,用 commons-codec 1.5 的 Base64.encodeBase64String(byte[]) 吧

复古式 2022-08-23 11:11:34

应该是windows系统会变成\r\n。
http://www.blogjava.net/javacap/archi...,会不加\r\n,另外效率提高一倍。
如果不想重写,只有将得到字符串去掉\r\n了。
根据RFC822规定,BASE64Encoder编码每76个字符,还需要加上一个回车换行。

故人爱我别走 2022-08-23 05:31:24

这个应该是你文本编辑器的原因,不同的文本编辑器,所用的换行符号有差别的
\n 换行
\r 回车

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文