正しい方向に私を向けることができますか?
JCE/JCA を使用してマスター秘密鍵から新しい鍵を取得したいのですが、どうすれば実現できますか?
よろしく。
正しい方向に私を向けることができますか?
JCE/JCA を使用してマスター秘密鍵から新しい鍵を取得したいのですが、どうすれば実現できますか?
よろしく。
JCA は、 PKCS#5 v2.0およびRFC 2898で定義されている PBKDF2 のような、標準のパスワード ベースのキー派生関数を提供します。このアルゴリズムは、特定の暗号に適したキーを生成するために、マスター シークレット (パスワード) からランダムな素材を作成します。
public byte[] deriveKey(String password, byte[] salt, int keyLen) {
SecretKeyFactory kf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
KeySpec specs = new PBEKeySpec(password.toCharArray(), salt, 1024, keyLen);
SecretKey key = kf.generateSecret(specs);
return key.getEncoded();
}
public byte[] encrypt(String password, byte[] plaintext) {
byte[] salt = new byte[64];
Random rnd = new Random();
rnd.nextByte(salt);
byte[] data = deriveKey(password, salt, 192);
SecretKey desKey = SecretKeyFactory.getInstance("DESede").generateSecret(new DESedeKeySpec(data));
Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, desKey);
return cipher.doFinal(plaintext);
}