使用JCE/JCA从主密钥中获取秘密

Lek*_*kie 5 java cryptography encryption-symmetric pkcs#5

有人能指出我正确的方向吗?

我想使用JCE/JCA从主密钥中获取新密钥,我该如何实现?

问候.

Jcs*_*Jcs 6

JCA提供标准的基于密码的密钥派生函数,如PKCS#5 v2.0RFC 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);
}
Run Code Online (Sandbox Code Playgroud)

  • 好样品.但请记住,在这种情况下(随机盐),您需要记住解密方法的盐.因为否则会很难扭转它.一种选择是返回盐+'$'+ cipher.doFinal(明文)(或使用固定盐). (2认同)