当我尝试使用Netbeans运行java代码时,一切都很好,RC2加密代码给出5BqOI5c¸ä3î1Ü
。但是在windows上运行编译后的jar文件,输出是不同的5B?qO?I5cä3???1Ü?
。如果我从linux运行相同的jar文件,问题就解决了。
这几乎肯定就是控制台在每种情况下处理非ascii字符的方式。然而,这是你做一些你不应该开始的事情的必然结果:当你不应该这样做时,将任意的byte[]
转换为String
,或者至少以一种你不应该的方式,例如new String(byte[])
。即使指定Charset
(在文本和该文本的二进制表示形式之间进行转换时,无论在哪个方向都应该这样做)在这里也没有帮助。
加密的结果是而不是编码的文本-它只是字节。理想情况下,您应该将其保留为byte[]
-毕竟它只是二进制数据。如果需要将其转换为文本,则应该使用十六进制或base64,因为这样您将获得一个总是可逆的ASCII表示,以返回原始二进制数据。
对于base64,您可能会考虑使用一个很好的公共域库。