Я генерирую сеансовый ключ, который меняется каждый раз, когда я запускаю программу. Но когда я конвертирую его в BYTE ARRAY, создается Byte Array каждый раз, когда я запускаю программу. ЭТО должно быть другим, правда? Вот мой код
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 []. Тем не менее он возвращает тот же результат.
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);
Почему это происходит. Мы будем благодарны за любые предложения
3 ответа
Прежде всего, код не компилируется и не запускается. Что будет (без импорта и класса)
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()
всех массивов. Следовательно, то, что ожидают Mudit и многие другие, было помещено в качестве статических методов во вспомогательный класс java.util.Arrays
начиная с Java5.
Я бы использовал DatatypeConverter, я использовал его в своем проекте безопасности, и он работал как шарм ...
Вы не можете полагаться на вызов toString()
байтового массива для проверки его содержимого. Возвращаемое значение не сообщает вам, что это за байты.
Если вы действительно хотите проверить содержимое байтового массива и посмотреть, изменяется оно или нет, используйте вместо этого Arrays.toString(byteArray)
. И тогда вы сможете убедиться, что байтовый массив действительно изменился.
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.