使用 JCE/JCA 从主密钥派生秘密 [英] Deriving a secret from a master key using JCE/JCA

查看:31
本文介绍了使用 JCE/JCA 从主密钥派生秘密的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Can some point me in the right direction?

我想使用 JCE/JCA 从主密钥派生新密钥,我该如何实现?

I'd like to use JCE/JCA to derive a new key from a master secret key, How can I achieve this?

问候.

推荐答案

JCA 提供标准的基于密码的密钥派生函数,如 PKCS#5 v2.0RFC 2898.该算法从主密钥(密码)中创建一些随机材料,以生成适合给定密码的密钥.

The JCA provides standard password-based key derivation functions like PBKDF2 defined in PKCS#5 v2.0 and RFC 2898. This algorithm creates some random material from a master secret (a password) in order to generate a key suitable for a given cipher.

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);
}

这篇关于使用 JCE/JCA 从主密钥派生秘密的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆