2017-12-05 2 views
0

キーを生成するためにjavax.crypto.KeyGeneratorを使用しています。以下はKeyGeneratorのAESとDESのキーサイズ

はAESのために私のコードです:DESのための

Key key = null; 
     SecureRandom rand = new SecureRandom(); 
     KeyGenerator generator; 
     try {      
      generator = KeyGenerator.getInstance("AES"); 
      generator.init(rand); 
      generator.init(128); 
      key = generator.generateKey(); 
     } catch (NoSuchAlgorithmException e) { 
      e.printStackTrace(); 
     } 
     System.out.println("AES key is : "); 
     System.out.println(Base64.getEncoder().encodeToString(key.getEncoded())); 

コード:

Key key = null; 
     SecureRandom rand = new SecureRandom(); 
     KeyGenerator generator; 
     try {      
      generator = KeyGenerator.getInstance("DES"); 
      generator.init(rand); 
      generator.init(56); 
      key = generator.generateKey(); 
     } catch (NoSuchAlgorithmException e) { 
      e.printStackTrace(); 
     } 
     System.out.println("DES key is : "); 
     System.out.println(Base64.getEncoder().encodeToString(key.getEncoded())); 

私はDESを使用するときにあなたが見ることができるように、私は(INITに56を渡す必要が)などの方法、 AESで128に反対した。

誰かが私が128ビットを使用できない理由と、この2つのタイプからどの暗号化が好ましいのか説明してもらえますか?

答えて

1

AESは、鍵サイズが大きいDESの高度なバージョンです。したがって、より安全な暗号化が必要な場合は、AESを使用することをお勧めします。

DES(データ暗号化標準):DESはFeistel Cipherの実装です。それは16ラウンドのFeistel構造を使用します。ブロックサイズは、 64ビットです。キーの長さは64ビットですが、DESの有効キーの長さは (56ビット)です。これは、キーの64ビットのうち8ビットが暗号化アルゴリズム(チェックビットとしての機能のみ)で使用されないためです。

のAdvanced Encryption Standard(AES):最近は に遭遇する可能性がより人気があり、広く採用されている対称暗号化アルゴリズムは、AES(Advanced Encryption Standard)です。トリプルDESよりも少なくとも6倍速く、 にあります。鍵サイズが小さすぎるため、DESの代替が必要でした。コンピューティングパワーが増加するにつれて、徹底的なキーサーチ攻撃に対して脆弱であると考えられました。トリプルDESはこの欠点を克服するために設計されましたが、遅いことが判明しました。

+2

わずかな修正では、AESは実際には「DESの高度なバージョン」ではなく、2つのアルゴリズムは実際には全く関連していません。 DESはAESに置き換えられました。 –