我已经使用以下方法在Linux上加密了一个文本文件:
gpg --cipher-algo AES256 -c file.txt
该命令要求输入密码,假设我们在这里输入“123”。
这个文件可以简单地解密:
gpg -d file.txt.gpg
现在我想用Java解密这个文件,但是无法使用密码“123”找到如何做到这一点。具体而言,尚不完全清楚盐和初始载体是什么,以及还需要什么。
答案 0 :(得分:4)
GnuPG实现了OpenPGP协议,该协议不是Java的本机类直接支持的。 OpenPGP有own file format,但也使用slightly different variant of the CFB mode。
不要自己实现所有这些,最好选择Bouncy Castle library。它还提供example how to decrypt a symmetrically encrypted message,归结为解密OutputStream out
的相关调用(在链接示例中还提供了一些代码来确定使用的算法参数和压缩):
PGPEncryptedDataGenerator encGen = new PGPEncryptedDataGenerator(
new JcePGPDataEncryptorBuilder(algorithm).setSecureRandom(
new SecureRandom()).setProvider("BC"));
encGen.addMethod(
new JcePBEKeyEncryptionMethodGenerator(passPhrase).setProvider("BC"));
OutputStream encOut = encGen.open(out, compressedData.length);