2013-03-14 2 views
1

При шифровании данных в Java следующим образом:инициализации шифра объекта в Java

SecureRandom sr = new SecureRandom(); 
    DESKeySpec dks = new DESKeySpec(rawKeyData); 

    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); 
    SecretKey key = keyFactory.generateSecret(dks); 
    Cipher cipher = Cipher.getInstance("DES"); 
    cipher.init(Cipher.ENCRYPT_MODE, key, sr); 
    // why the sr is necessary to init a Cipher object? 
    byte data[] = str.getBytes(); 
    byte[] encryptedData = cipher.doFinal(data); 

Почему SecureRandom объект sr необходимо инициализировать шифра объект? Что касается стороны расшифровки, также нужен объект SecureRandom, который не совпадает с тем, который был создан в размере шифрования. Являются ли эти SecureRandom объектами только для цифры четности?

ответ

2

Объект SecureRandom не является обязательным. Если вы его не выбрали, Java будет использовать случайный случай по умолчанию. См. Документацию this method, чтобы понять, как ее выбрать.

Cipher Javadocs объясняет цель этого аргумента:

Если этот шифр (в том числе лежащей в его основе обратной связи или схемы дополнения) требует каких-либо случайных байт (например, для генерации параметров), он будет получать их от случайного.

Итак, в вашем конкретном случае вы, вероятно, вообще не используете этот предмет. Ничто в вашем использовании DES не потребует случайных данных (поскольку вы, кажется, используете режим ECB). Если вы использовали CBC-режим, я предполагаю, что IV будет произвольно генерироваться из объекта SecureRandom.

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