2011-01-31 8 views
2

今私は暗号について勉強していますが、私はJCEに興味がありますが、私はKeyGeneratorクラスについて混乱しています。私はこのクラスが対称アルゴリズムの鍵を生成できることを知っていますが、私は理解できませんなぜこのクラスを使うべきですか?私はSecretKeyFactoryを使って秘密鍵を自分で作成し、これを使って暗号オブジェクトを初期化することができます。私はJCEのKeyGeneratorとエンコードされたキーについて混同しています

// 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()」メソッドをどのような状況で使用する必要がありますか?

答えて

0

KeyGeneratorは、キーを生成するための便利なクラスです。 Cipherで使用するアルゴリズムを教えてください。を入力することなく、アルゴリズムと一致するキーを生成できます。

もちろんこれを手動で行うことはできますが、疑問に思ったようにいくつかのステップが必要です(また、byte[] keyでキーデータを生成することさえできません)。

0

いくつかのJCEプロバイダでは、データの暗号化と復号化に使用されるキーは、バイト配列よりも安全に扱われますが、メモリ内に決して存在しません。たとえば、スマートカードとHSMに裏打ちされたプロバイダは、そのように機能します。

バイト配列を作成し、そこからキーを構築すると、明示的にメモリにロードされます。 KeyGeneratorを使用すると、鍵は安全なストレージに作成され、メモリには存在しないため、攻撃ベクトルが1つ除かれます。

関連する問題