getByte() 为不同的字符串返回相同的 byte[]
getByte() is returning same byte[ ] for different Strings
我正在生成会话密钥,每次 运行 程序都会更改。
但是当我将它转换为字节数组时,每次我 运行 程序生成的字节数组都是相同的。 IT 应该有所不同吧?
这是我的代码
Key key;
SecureRandom rand = new SecureRandom();
KeyGenerator generator = KeyGenerator.getInstance("AES");
generator.init(rand);
generator.init(256);
key = generator.generateKey();
String key1=key.toString();
byte[] genratesessionKey1 = key1.getBytes();
System.out.println("SESSION KEY IS(Byte format) "+genratesessionKey1.toString());
然后我也用了一个虚拟字符串。然后我生成了它的 Byte[]。然后我更改了该字符串中的值并再次生成了它的 Byte[]。还是 returns 同样的结果。
String test2="yadav";
String key1=key.toString();
byte[] genratesessionKey1 = key1.getBytes();
byte[] g2=test.getBytes("UTF-8");
byte[] g3=test.getBytes();
System.out.println("Session key in String "+key1);
System.out.println("Testing Byte Format "+g2);
System.out.println("Testing Byte Format 2 "+g3);
为什么 happening.Any 建议将不胜感激
您不能依赖对字节数组调用 toString()
来检查其内容。返回值不会告诉您字节是什么。
如果您真的想检查字节数组的内容并查看它是否发生变化,请改用 Arrays.toString(byteArray)
。然后你应该能够验证字节数组确实改变了。
首先,代码既不会编译也不会 运行。什么将(省略进口和 class)是
public static void main(String[] args)
throws NoSuchAlgorithmException, UnsupportedEncodingException {
Key key;
SecureRandom rand = new SecureRandom();
KeyGenerator generator = KeyGenerator.getInstance("AES");
generator.init(rand);
generator.init(256);
key = generator.generateKey();
String key1 = key.toString();
byte[] genratesessionKey1 = key1.getBytes();
System.out.println("SESSION KEY IS(Byte format) "
+ genratesessionKey1.toString());
String test2="yadav";
byte[] g2 = test2.getBytes("UTF-8");
byte[] g3 = test2.getBytes();
System.out.println("Session key in String " + key1);
System.out.println("Testing Byte Format " + g2);
System.out.println("Testing Byte Format 2 " + g3);
System.out.println("Session key in String "
+ Arrays.toString(genratesessionKey1));
} // main(String[])
输出将是
SESSION KEY IS(Byte format) [B@1c53fd30
Session key in String javax.crypto.spec.SecretKeySpec@fffe8e54
Testing Byte Format [B@50cbc42f
Testing Byte Format 2 [B@75412c2f
这只是在将(无用的)地址显示为散列值的意义上显示继承 Object.toString()
的数组。因此,toString()
让所有数组看起来都一样,无论长度或内容如何。
Mudit 可能想查看数组的内容。添加
System.out.println("Session key in String "
+ Arrays.toString(genratesessionKey1));
产量
Session key in String [106, 97, 118, 97, 120, 46, 99, 114, 121, ....
基本原理:向下兼容性禁止增强所有数组的(重复我没用的)方法toString()
。因此,自从 Java5.
以来,Mudit 和许多其他人所期望的是作为静态方法放在助手 class java.util.Arrays
中
我会使用 DatatypeConverter 我在我的安全项目中使用过它,它的效果非常好...
我正在生成会话密钥,每次 运行 程序都会更改。 但是当我将它转换为字节数组时,每次我 运行 程序生成的字节数组都是相同的。 IT 应该有所不同吧? 这是我的代码
Key key;
SecureRandom rand = new SecureRandom();
KeyGenerator generator = KeyGenerator.getInstance("AES");
generator.init(rand);
generator.init(256);
key = generator.generateKey();
String key1=key.toString();
byte[] genratesessionKey1 = key1.getBytes();
System.out.println("SESSION KEY IS(Byte format) "+genratesessionKey1.toString());
然后我也用了一个虚拟字符串。然后我生成了它的 Byte[]。然后我更改了该字符串中的值并再次生成了它的 Byte[]。还是 returns 同样的结果。
String test2="yadav";
String key1=key.toString();
byte[] genratesessionKey1 = key1.getBytes();
byte[] g2=test.getBytes("UTF-8");
byte[] g3=test.getBytes();
System.out.println("Session key in String "+key1);
System.out.println("Testing Byte Format "+g2);
System.out.println("Testing Byte Format 2 "+g3);
为什么 happening.Any 建议将不胜感激
您不能依赖对字节数组调用 toString()
来检查其内容。返回值不会告诉您字节是什么。
如果您真的想检查字节数组的内容并查看它是否发生变化,请改用 Arrays.toString(byteArray)
。然后你应该能够验证字节数组确实改变了。
首先,代码既不会编译也不会 运行。什么将(省略进口和 class)是
public static void main(String[] args)
throws NoSuchAlgorithmException, UnsupportedEncodingException {
Key key;
SecureRandom rand = new SecureRandom();
KeyGenerator generator = KeyGenerator.getInstance("AES");
generator.init(rand);
generator.init(256);
key = generator.generateKey();
String key1 = key.toString();
byte[] genratesessionKey1 = key1.getBytes();
System.out.println("SESSION KEY IS(Byte format) "
+ genratesessionKey1.toString());
String test2="yadav";
byte[] g2 = test2.getBytes("UTF-8");
byte[] g3 = test2.getBytes();
System.out.println("Session key in String " + key1);
System.out.println("Testing Byte Format " + g2);
System.out.println("Testing Byte Format 2 " + g3);
System.out.println("Session key in String "
+ Arrays.toString(genratesessionKey1));
} // main(String[])
输出将是
SESSION KEY IS(Byte format) [B@1c53fd30
Session key in String javax.crypto.spec.SecretKeySpec@fffe8e54
Testing Byte Format [B@50cbc42f
Testing Byte Format 2 [B@75412c2f
这只是在将(无用的)地址显示为散列值的意义上显示继承 Object.toString()
的数组。因此,toString()
让所有数组看起来都一样,无论长度或内容如何。
Mudit 可能想查看数组的内容。添加
System.out.println("Session key in String "
+ Arrays.toString(genratesessionKey1));
产量
Session key in String [106, 97, 118, 97, 120, 46, 99, 114, 121, ....
基本原理:向下兼容性禁止增强所有数组的(重复我没用的)方法toString()
。因此,自从 Java5.
java.util.Arrays
中
我会使用 DatatypeConverter 我在我的安全项目中使用过它,它的效果非常好...