使用SpongyCastle导入PGP密钥并检查我是否可以使用它解密,我想添加密码以保护密钥环。所以我制作了一份加密副本:
secretKeyRing = PGPSecretKeyRing.copyWithNewPassword(secretKeyRing, new char[] {},
newPassPhrase.toCharArray(), PGPEncryptedData.CAST5,
new SecureRandom(), new BouncyCastleProvider());
我用以下方法测试解密:
testKey = secretKeyRing.getSecretKey().extractPrivateKey(newPassPhrase.toCharArray(), new BouncyCastleProvider());
这显然很好。
当我尝试使用此加密密钥解密文件时,使用相同的密码:
PGPPrivateKey testKey = secretKey.extractPrivateKey(passPhrase.toCharArray(),
new BouncyCastleProvider());
其中secretKey是密钥环的主密钥,我得到一个PGPException说
Exception constructing key
我觉得我错过了一些明显的东西。请随时询问更多详情。
这是我正在构建的自定义pgp应用程序,只需要导入一个私钥,因此主密钥是唯一的密钥,AFAI理解。
答案 0 :(得分:1)
我找到了问题的解决方案:我只需要使用相同的算法对新密钥环进行编码。
secretKeyRing = PGPSecretKeyRing.copyWithNewPassword(secretKeyRing, new char[] {},
newPassPhrase.toCharArray(), secretKeyRing.getSecretKey().getKeyEncryptionAlgorithm(),
new SecureRandom(), new BouncyCastleProvider());