如何使用 scrypt 用密码加密私钥

How do I use scrypt to encrypt a private key with a password

如何使用 scrypt 加密使用 java 中的 KeyPairGenerator 创建的私钥?我想用密码保护私钥,所以即使他有私钥和数据,也没有人可以使用私钥解密我加密的数据。 (我会使用 BouncyCastle API,如果你不建议任何其他)

谢谢

要使用 KeyPairGenerator,您可以使用 PBEKey 和参数对密码支持的私钥进行加密

KeyPairGenerator generator = KeyPairGenerator.getInstance();

int count = 5;

keyPairGenerator.initialize();
KeyPair kPair = generator.genKeyPair();

byte[] privateKey = kPair.getPrivate().getEncoded();

String stringPb = "PBEWithSHA1AndDESede";
String password = "your_own_password";

SecureRandom rndm = new SecureRandom();

PBEParameterSpec paramSpec = new PBEParameterSpec(salt, count);
PBEKeySpec keySpec = new PBEKeySpec(password.toCharArray());

SecretKeyFactory factory = SecretKeyFactory.getInstance();
SecretKey pbeKey = factory.generateSecret(keySpec);

Cipher cipher = Cipher.getInstance(stringPb);

cipher.init(ENCRYPT_MODE, pbeKey, paramSpec);

byte[] text = cipher.doFinal();

AlgorithmParameters parametres = AlgorithmParameters.getInstance();
parametres.init(paramSpec);
EncryptedPrivateKeyInfo encinfo = new EncryptedPrivateKeyInfo(parametres, text);