Bouncycastle(Spongycastle)在android上进行密钥导入和使用

时间:2013-12-13 17:05:14

标签: java android encryption bouncycastle spongycastle

使用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理解。

1 个答案:

答案 0 :(得分:1)

我找到了问题的解决方案:我只需要使用相同的算法对新密钥环进行编码。

secretKeyRing = PGPSecretKeyRing.copyWithNewPassword(secretKeyRing, new char[] {},
                newPassPhrase.toCharArray(), secretKeyRing.getSecretKey().getKeyEncryptionAlgorithm(),
                new SecureRandom(), new BouncyCastleProvider());