将Java字符串转换为字节数组
我有一个字节数组,我正在加密然后转换为字符串,以便它可以传输。 当我收到字符串时,我必须将字符串转换回字节数组,以便解密。 我已检查收到的字符串是否匹配发送的字符串(包括长度),但是当我使用str.getBytes()之类的东西将其转换为字节数组时,它与我的原始字节数组不匹配。
示例输出:
SENT: WzShnf/fOV3NZO2nqnOXZbM1lNwVpcq3qxmXiiv6M5xqC1A3 SENT STR: [B@3e4a9a7d RECEIVED STR: [B@3e4a9a7d RECEIVED: W0JAM2U0YTlhN2Q=
任何想法我如何将收到的字符串转换为匹配发送的字节数组的字节数组?
谢谢
你使用了array.toString()
,它实现如下:
return "[B@" + Integer.toString(this.hashCode(), 16);
(实际上它inheritance了Object的定义,而@
之前的部分只是getClass().getName()
。)
而hashCode在这里并不依赖于内容。
相反,使用新的String(数组,编码)。
当然,这仅适用于字节数组,它实际上可以表示为Java字符串(然后包含可读字符),而不是任意数组。 最好使用像Bozho推荐的base64(但一定要在频道的两侧使用它)。
这看起来像Base64。 看看commons-codec Base64
类。
你不能只在两台不同的机器上使用getBytes(),因为getBytes使用了plattform的默认字符集。
使用指定的字符集(即UTF-8)对数组进行解码和编码,以确保获得正确的结果。
首先,通过执行操作将您的字节数组转换为正确的字符串
String line= new String(Arrays.toString(your_array))
然后发送它并使用下面的function
public static byte[] StringToByteArray(String line) { String some=line.substring(1, line.length()-1); int element_counter=1; for(int i=0; i