1

次のように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);

Cipher オブジェクトを初期化するためにaSecureRandomオブジェクトが必要なのはなぜですか? 復号化側に関しては、暗号化サイズで生成されたものと同じではないオブジェクトsrも必要です。SecureRandomこれらのSecureRandomオブジェクトはパリティ ディジット専用ですか?

4

1 に答える 1

2

SecureRandomオブジェクトはオプションです。いずれかを選択しない場合、Java はランダム性のデフォルト ソースを使用します。どのように選択するかを理解するには、このメソッドのドキュメントを参照してください。

CipherJavadocsは、この引数の目的を説明しています:

この暗号 (基礎となるフィードバックまたはパディング スキームを含む) がランダム バイトを必要とする場合 (たとえば、パラメーター生成用)、ランダムから取得します。

したがって、あなたの特定のケースでは、おそらくこのアイテムをまったく使用していないでしょう. DES を使用する場合、ランダム データは必要ありません (ECB モードを使用しているように見えるため)。CBC モードを使用していた場合、IV はSecureRandomオブジェクトからランダムに生成されると思います。

于 2013-03-14T10:25:52.793 に答える