【发布时间】:2012-04-18 05:44:54
【问题描述】:
我正在将 byte[] 数组转换为 string 。然后将字符串转换回 byte[] 数组。然后检查两个数组是否相等 - 我知道它们不相等:
byte[] ciphertext2=c.doFinal(username.getBytes("utf-8"));
//JUST CHECKING IGNORE
String qaz=new String(ciphertext2,"utf-8");
//qaz=qaz+"1";
System.out.println("just chekcing------------------------"+qaz);
byte[] ciphertext3=qaz.getBytes("utf-8");
if(Arrays.equals(ciphertext2,ciphertext3))
{
System.out.println("just chekcing they are equal------------------------");
}
else
System.out.println("just chekcing they are not equal------------------------");<br>
输出:
just chekcing they are not equal--------------------
为什么它不起作用?
编辑
使用 Java 的 Base64 时,它工作得非常好。但是为什么直接将字节转换为字符串时它不起作用?当您将字符串转换为字节数组并反之亦然时,实际会发生什么?
【问题讨论】:
-
您的字节可能不是有效的 utf-8。当它们被解析为 utf-8 字符串时,无效的序列被转换为有效的 utf-8 序列,因此字节数组是不同的。 Base64 保证是有效的 utf-8(毕竟它是 ascii 的超集)。
-
@bdares :如何将字节数组转换为字符串?里面发生了什么?
-
如果我对用户名的值进行硬编码,我会认为这是真的。
-
@UNNI:你加密了吗?加密后的用户名转换成字符串。
-
是的,非常....say "hello".getBytes("utf-8")。这将使您的比较成真