2015-12-07 2 views
0

Ниже приведен пример того, как я шифрую текст в java, хотя шифрование работает. Я не могу понять, как я могу изменить уровень шифрования т.е. 128, 256, 512 и т.д.Как я могу выбрать силу моего AES-шифрования, например 128, 256, 512 и т. Д.?

Код:

byte keySelectedByUser[] = selectedKey.getBytes(); 
SecretKeySpec secretKey = new SecretKeySpec(keySelectedByUser, "AES"); 

Cipher cipher; 

cipher = Cipher.getInstance("AES/CBC/PKCS7PADDING"); 

cipher.init(Cipher.ENCRYPT_MODE, secretKey); 

byte[] encrypted = cipher.doFinal(stringToEncrypt.getBytes()); 

Как я могу это сделать в Java?

+0

x в AES-x - длина ключа: http://stackoverflow.com/questions/19061658/how-to-switch-from-aes-256-to-aes-128 - PBE делает ключи разной длины от паролей – zapl

ответ

1

Использование SecretKey. Например:

final int KEY_LENGTH = 256; 
final SecretKeyFactory factory = SecretKeyFactory.getInstance("YourPreferredAlgorithm"); 
final SecretKey key = factory.generateSecret(new PBEKeySpec(pass, salt, iterations, KEY_LENGTH)); 

Затем используйте SecretKey чтобы получить ваше SecretKeySpec:

final SecretKeySpec keySpec = new SecretKeySpec(key.getEncoded(), "AES"); 
+0

Можете ли вы объяснить свой ответ, а именно: пропуск, соль, итерации и заводские. Как я не совсем понимаю, о чем вы говорите? – Screen

+2

Итерации - это количество раз, когда пароль хэшируется при выводе (симметричной) клавиши. Общее эмпирическое правило: больше итераций = сложнее для brutforce. Соль является дополнительной мерой предосторожности для предотвращения нападений с использованием bruteforce: вам нужно знать соль и пароль, прежде чем вы сможете проверить, действительно ли ваш хеш. Для получения дополнительной информации см. Https://docs.oracle.com/javase/7/docs/api/javax/crypto/spec/PBEKeySpec.html#PBEKeySpec (char[],%20byte[],%20int,%20int) – nbokmans

+0

См. [Здесь] (http://stackoverflow.com/questions/6126061/pbekeyspec-what-do-the-iterationcount-and-keylength-parameters-influence). – m0skit0

0

Там НИКАКОГО AES-512. AES поддерживает только размеры клавиш 128, 192 и 256 бит. В Java вы выбираете соответствующий размер ключа, передавая ключ такого размера: byte[] длиной 16, 24 или 32.

Если у вас есть пароль, и вы хотите растянуть ключ от него, то вам нужно использовать основанная на пароле функция вывода ключей, такая как PBKDF2, bcrypt, scrypt или Argon2. Не забудьте настроить итерации или коэффициент затрат в соответствии с вашими потребностями: как можно выше, без особых неудобств для пользователя.