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


在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是换两行。
一般对于换行的情况都是怎么解决的?

java base64 castor 回车 换行

闪光迎击神话 10 years, 11 months ago

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

玛丽坦·库鲁斯 answered 10 years, 11 months ago

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

绯皇宮神耶 answered 9 years, 8 months ago

Your Answer