2015-01-19 3 views
0

Я новичок в Encryptions. Я нахожу коды шифрования, и я пытаюсь понять, как он работает, потому что это интересно, и мне нравится его кодировать в будущем.AES String Шифрование/дешифрование

Тогда я нашел этот код:

System.out.print("Enter text: "); 
     String text = dataIn.readLine(); 
     String key = "Bar12345Bar12345"; // 128 bit key 

     // Create key and cipher 
    Key aesKey = new SecretKeySpec(key.getBytes(), "AES"); 
    Cipher cipher = Cipher.getInstance("AES"); 
... 

Перед тем, как начать работать над этим. Я не знаю, как работает String = Bar12345Bar12345. В нем говорится, что это 128 bit key. Постоянна ли константа String? Можно ли это изменить?

+1

Строка длиной 18 символов ASCII, поэтому длина бит составляет 18 * 8 бит = 128 бит. Это секретный ключ для шифрования/дешифрования, поэтому вы должны хранить его в секрете. – SubOptimal

+2

16 x 8 = 128 :-) – Metatron

+0

Так это нормально изменить его, пока его длина равна 16? – Yodism

ответ

3

Чтобы быть точным, строка не является вашим ключом, а байтами вы получаете от key.getBytes(). Хотя это может работать для этого образца, это не то, что вы должны сделать в производстве кода:

  • GetBytes() может преобразовать строку в различные байты, если используется другая кодировка (вряд ли для ваших, специфических строк, так как оно это только ASCII, но что-то, о чем вы должны знать).
  • Вам нужна строка правильной длины.
  • Качество сгенерированного ключа будет довольно плохим. Для производственного кода вы должны использовать функцию деривации ключа, такую ​​как pbkdf2, для получения ключа от чего-то вроде пароля.

Существует еще одна проблема: вместо того, чтобы просто использовать «AES» вы должны также задать режим работы и дополнения при построении вашего шифра объекта (например, «AES/CBC/PKCS5Padding»). В противном случае второй и третий параметры зависят от поставщика.

Смежные вопросы