2

暗号化の使用に関していくつか質問があります。私はAESを使用しています。

質問1:

SecretKeyFactoryのクラスを使用しようとしています。PBKDF1 PKCS#5に関連するインスタンスを取得しようとしています。私は暗号化に不慣れです。オンラインで試しましたが、そのようなアルゴリズムを見つけることができませんでした。それをサポートします。こんなものが欲しいです。

SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF1Pkcs#5");
KeySpec spec = new PBEKeySpec(password, salt, 1, 128);

質問2:

上記の2行のコードは、Crypto ++コードの以下のコード行と同じことをしますか?

PKCS5_PBKDF1 <MD5> fn;
fn.DeriveKey(key, MD5::DIGESTSIZE, 0, key.getBytes(), salt.getBytes(), salt.size(), PBKDF1_ITERATIONS, time_in_seconds);

そうでない場合は、上記のc++コードの行が行うことを模倣できるものを誰かが与えることができます。

ありがとう

4

1 に答える 1

5

Re:質問1

SecretKeyFactoryのJava6APIドキュメントによると、

アプリケーション開発者は、プロバイダーのドキュメントを参照して、generateSecretメソッドとgetKeySpecメソッドでサポートされているキー仕様を確認する必要があります。たとえば、「SunJCE」プロバイダーによって提供されるDES秘密鍵ファクトリはDESキーの透過的表現としてDESKeySpecをサポートし、トリプルDESキーのそのプロバイダーの秘密鍵ファクトリはトリプルDESキーの透過的表現としてDESedeKeySpecをサポートします。

PKCSのSunJCEプロバイダーのドキュメントを見ると、...

PBEWithMD5AndDES:RSA Laboratories、「PKCS#5:Password-Based Encryption Standard」、バージョン1.5、1993年11月に定義されているパスワードベースの暗号化アルゴリズム。このアルゴリズムは、暗号モードとしてCBCを、パディングスキームとしてPKCS5Paddingを意味することに注意してください。他の暗号化モードまたはパディングスキームでは使用できません。

Re:質問2

同じドキュメントの「パスワードベースの暗号化の使用」セクションに、次のサンプルコードがあります。サンプルコードは静的ソルトを使用しますが、安全な実装では、ユーザーがパスワードを変更するたびにランダムソルトを生成することを使用することに注意してください。

PBEKeySpec pbeKeySpec;
PBEParameterSpec pbeParamSpec;
SecretKeyFactory keyFac;

// Salt
byte[] salt = {
    (byte)0xc7, (byte)0x73, (byte)0x21, (byte)0x8c,
    (byte)0x7e, (byte)0xc8, (byte)0xee, (byte)0x99
};

// Iteration count
int count = 20;

// Create PBE parameter set
pbeParamSpec = new PBEParameterSpec(salt, count);

// Prompt user for encryption password.
// Collect user password as char array (using the
// "readPasswd" method from above), and convert
// it into a SecretKey object, using a PBE key
// factory.
System.out.print("Enter encryption password:  ");
System.out.flush();
pbeKeySpec = new PBEKeySpec(readPasswd(System.in));
keyFac = SecretKeyFactory.getInstance("PBEWithMD5AndDES");
SecretKey pbeKey = keyFac.generateSecret(pbeKeySpec);

// Create PBE Cipher
Cipher pbeCipher = Cipher.getInstance("PBEWithMD5AndDES");

// Initialize PBE Cipher with key and parameters
pbeCipher.init(Cipher.ENCRYPT_MODE, pbeKey, pbeParamSpec);

// Our cleartext
byte[] cleartext = "This is another example".getBytes();

// Encrypt the cleartext
byte[] ciphertext = pbeCipher.doFinal(cleartext);

その他のアルゴリズム

繰り返しますが、同じページから。本当に、私はあなたが全体を読むことをお勧めします、それはおそらくあなたが持っている他の質問にも答えるでしょうから

PBEWith <digest>And<encryption>またはPBEWith<prf>And <encryption>:PKCS#5パスワードベースの暗号化で使用する秘密鍵ファクトリ。<digest>はメッセージダイジェスト、<prf>は疑似ランダムです。関数であり、<encryption>は暗号化アルゴリズムです。例:PBEWithMD5AndDES(PKCS#5、v 1.5)およびPBEWithHmacSHA1AndDESede(PKCS#5、v 2.0)。注:これらは両方とも、各パスワード文字の下位8ビットのみを使用します。

于 2012-06-18T20:01:51.950 に答える