【发布时间】:2012-03-06 15:02:06
【问题描述】:
我需要转换一个随机生成的盐值并将其存储在数据库中。为了将其存储在数据库中,我将其转换为字符串。然后为了检索原始值,我将其转换回字节。但是两个值都不匹配。我试过“UTF-8”、“UTF-16”、BASE64Encoder。
SecureRandom ranGen = new SecureRandom();
byte[] aesKey = new byte[16]; // 16 bytes = 128 bits
ranGen.nextBytes(aesKey);
System.out.println(aesKey);
String a=new String(aesKey,"UTF-16");
byte[] b=new byte[16];
b=a.getBytes("UTF-16");
System.out.println(b);
上述代码的输出(执行2次):
[B@11563ff
[B@1581593
和
[B@170888e
[B@11563ff
【问题讨论】:
-
两个系统输出的输出是什么?
-
正如我在回答中所说,您在这里打印的是 Object toString 输出,默认情况下是 getClass().getName() + "@" + Integer.toHexString(hashCode() )。因此,由于您有两个不同的字节数组(即不同的对象),因此输出是不同的。
-
正如 DaveJohnston 所暗示的,在 java 语言中使用 toString() 时应该小心。
标签: java encoding character-encoding bytearray