2016-05-10 3 views
1

Как переключаться между AES-128, AES-192 и AES-256. Моя нынешняя реализация использует только AES-128Как переключаться между AES-128, AES-192 и AES-256

Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); 
IvParameterSpec ivspec = new IvParameterSpec(initialztnVector); 
cipher.init(Cipher.ENCRYPT_MODE, key, ivspec); 
byte[] enc = cipher.doFinal(toEncrypt); 

Переход к Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

Будет ли это сделать AES-256 возможным? Что делать, если у меня есть AES-192

+0

В дополнение к изменению шифрования для AES-256 вы также должны иметь правильные .jar-файлы в $ JAVA_HOME/jre/lib/security. – KevinO

ответ

3

Как уже упоминалось в @zaph, просто введите 256-битный ключ в качестве входа и он работает (независимо от используемого режима (например, CBC) или Padding).

Кроме того, как указано в @KevinO, вам может потребоваться установить файлы политики неограниченной силы (here для Java 8) для поддержки 256 бит безопасности AES.

Иногда, особенно если вам необходимо распространять свое программное обеспечение, не всегда возможно изменить файлы политики на компьютере вашего клиента. Хотя вы не можете нарушать Лицензионное соглашение Java, вы можете использовать отражение для обхода ограничений без изменения файлов политики по умолчанию. Портированный из этого link, просто используйте этот фрагмент, который будет работать во время загрузки класса. Затем вы можете использовать любой поддерживаемый размер ключа.

static { 
    try { 
     Field field = Class.forName("javax.crypto.JceSecurity").getDeclaredField("isRestricted"); 
     field.setAccessible(true); 
     field.set(null, java.lang.Boolean.FALSE); 
    } catch (Exception ex) { 
    //Report the exception 
    } 
} 
+0

Хороший улов, только что скорректировал его. –

2

В библиотеке определяется длина ключа AES в зависимости от длины прилагаемого ключа. Sloppy, явно указывая, будет более понятным. Убедитесь, что прилагаемый ключ точно правильной длины, не полагайтесь на заполнение клавиш.

Прокладка не имеет отношения к размеру ключа. Заполнение необходимо, если длина входных данных в обычном тексте не всегда (или априори) - точная кратность размера блока (16 байтов для AES).

Обратите внимание на комментарий @KevinO относительно использования правильного файла .jar.

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