我目前在Java应用程序中使用BouncyCastle PGP从字符串中读取公共密钥,并使用该密钥加密文件。正在加载密钥...
Security.addProvider(new BouncyCastleProvider());
InputStream keyIn = new ByteArrayInputStream(publicKey.getBytes());
PGPPublicKeyRingCollection pgpKeyRing = new PGPPublicKeyRingCollection(PGPUtil.getDecoderStream(keyIn), new JcaKeyFingerpringCalculator());
PGPPublicKey = pgpKeyRing.getKeyRings().next().getPublicKey();
可以使用
解密输出文件gpg --decrypt file.gpg
即使gpg --list-keys
和gpg --list-secret-keys
为空
这怎么可能?是否可能从其他地方读取钥匙圈?我在CentOS 7上,已删除〜/ .gnupg并重新创建了它。
我还尝试过更改用于加密的公共密钥,但它仍会解密。
答案 0 :(得分:1)
事实证明,我的代码存在错误,并且正在写出PGP压缩文件的Ascii防护版本,但未加密。因为gpg --decrypt
会解压缩该文件,即使密钥环中没有密钥也是如此,因为它从不进行检查。 gpg --debug-level 9
对于解决这一问题很有帮助。