Я запутался насчет KeyGenerator и закодированного ключа в JCE - PullRequest
2 голосов
/ 31 января 2011

Сейчас я изучаю криптографию и меня интересует JCE, но я запутался в классе KeyGenerator.Я знаю, что этот класс может генерировать ключ для симметричного алгоритма, но я не понимаю , почему я должен использовать этот класс? , поскольку я могу самостоятельно создать секретный ключ с помощью SecretKeyFactory и использовать его для инициализации объекта шифрования, верно?

как этот код ниже

// Create Key
DESKeySpec desKeySpec = new DESKeySpec(key);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);

// Create Cipher
Cipher desCipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
desCipher.init(Cipher.ENCRYPT_MODE, secretKey);

, а затем сравнить с этим кодом

KeyGenerator generator = KeyGenerator.getInstance("AES", "BC");

generator.init(192);

Key encryptionKey = generator.generateKey();

В чем разница между ними?Они делают одно и то же?

Кроме того, В какой ситуации мне следует выбрать метод getEncoded () ??

Ответы [ 2 ]

0 голосов
/ 31 января 2011

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

Когда вы создаете байтовый массив, а затем создаете из него ключ, вы явно загружаете его в память. При использовании KeyGenerator ключ может быть создан в безопасном хранилище и отсутствует в памяти, исключая один вектор атаки.

0 голосов
/ 31 января 2011

KeyGenerator - это удобный класс для генерации ключей.Вы можете сказать ему, какой алгоритм вы будете использовать в вашем Cipher, и он может сгенерировать ключ, который соответствует алгоритму , без необходимости предоставлять что-либо .

Конечно, вы можете сделать этовручную, но это занимает несколько шагов, как вы продемонстрировали в своем вопросе (и вы даже не рассматриваете создание ключевых данных в byte[] key).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...