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

Java 如何使用scrypt用密码加密私钥,java,cryptography,key,bouncycastle,scrypt,Java,Cryptography,Key,Bouncycastle,Scrypt,如何使用scrypt对java中使用KeyPairGenerator创建的私钥进行加密?我想用密码保护私钥,这样就没有人可以用私钥解密我加密的数据,即使他有私钥和数据。 (如果你没有其他建议,我会使用BouncyCastleAPI) 感谢使用KeyPairGenerator,您可以使用PBEKey和参数对密码支持的私钥进行加密 KeyPairGenerator generator = KeyPairGenerator.getInstance(); int count = 5; keyPair

如何使用scrypt对java中使用
KeyPairGenerator
创建的私钥进行加密?我想用密码保护私钥,这样就没有人可以用私钥解密我加密的数据,即使他有私钥和数据。 (如果你没有其他建议,我会使用BouncyCastleAPI)


感谢使用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);

将其放入
密钥库
。这就是他们的目的。我不知道在私钥保护、Bouncycastle或任何其他库中是否有对scrypt的方便支持。然而,PKCS#12和PKCS#8都支持PBKDF2中的一个很好的替代方案。PBKDF2可能不如基于scrypt的解决方案好,但仍然相当不错。PKCS#12现在是Java密钥存储库的首选格式,因此,正如前面的评论所指出的,这很可能是一个方向。