不使用Java.Runtime在Java中解密gpg
我有一个.gpg文件和一个RSA私钥。我如何在不使用操作系统的情况下对其进行编程解密?e、 g.不使用类似于不使用Java.Runtime在Java中解密gpg,java,rsa,gnupg,Java,Rsa,Gnupg,我有一个.gpg文件和一个RSA私钥。我如何在不使用操作系统的情况下对其进行编程解密?e、 g.不使用类似于Runtime.getRuntime().exec(“gpg-decrypt….”)的东西 我发现所有的库都运行操作系统。与或类似。该库提供(除其他功能外)OpenPGP实现。包org.bouncycastle.openpgp.examples包含几个使用示例,其中一个示例展示了如何使用公钥/密钥对加密/解密文件(您可以查看上或上的示例)。该库提供了(除其他功能外)openpgp实现。包o
Runtime.getRuntime().exec(“gpg-decrypt….”)的东西代码>
我发现所有的库都运行操作系统。与或类似。该库提供(除其他功能外)OpenPGP实现。包org.bouncycastle.openpgp.examples
包含几个使用示例,其中一个示例展示了如何使用公钥/密钥对加密/解密文件(您可以查看上或上的示例)。该库提供了(除其他功能外)openpgp实现。包org.bouncycastle.openpgp.examples
包含几个使用示例,其中一个示例展示了如何使用公钥/密钥对加密/解密文件(您可以查看上或上的示例)。正如Skyr提到的:bouncycastle是一个不错的选择
你想用这把钥匙做什么?如果你的目标是加密或解密文件,你可能想看看(无耻的插件:我写的)
使用密钥实际上需要三个步骤
解析密钥并将其放入PGPSecretKeyRing
从密钥环中提取密钥
用密码解密它
1.解析导出的密钥
在任何情况下,请在此处查找:
3.解密密钥
稍后你必须:
正如Skyr所提到的:Bouncy Castle是一个不错的选择
你想用这把钥匙做什么?如果你的目标是加密或解密文件,你可能想看看(无耻的插件:我写的)
使用密钥实际上需要三个步骤
解析密钥并将其放入PGPSecretKeyRing
从密钥环中提取密钥
用密码解密它
1.解析导出的密钥
在任何情况下,请在此处查找:
3.解密密钥
稍后你必须:
我用PGP在Bouncy Castle上试过的例子太多了。常见的问题是在KeyRing中找不到keyID
所以,我发现@Jens的gpg很有弹性(不确定他是否还保持着它)
这是他在github.io上的文档。这是简单的遵循和工作!
我用PGP在Bouncy Castle上试过的例子太多了。常见的问题是在KeyRing中找不到keyID
所以,我发现@Jens的gpg很有弹性(不确定他是否还保持着它)
这是他在github.io上的文档。这是简单的遵循和工作!
试过了吗?需要密码短语而不是密钥,@Mortezashahrarinia:BouncyCastle支持GPG使用的所有加密方法。是否尝试过?需要密码而不是密钥,@Mortezashahrarinia:BouncyCastle支持GPG提供的所有加密方法。您不能将maven jar添加到公共maven存储库中吗?我不想添加额外的存储库。上次我查看时,在maven central中添加一些东西真的很麻烦。因为jcenter是maven central的超集,所以这是获得广泛分布的最简单方法。但任何公关都是受欢迎的!是的,要把它放在Maven回购协议上有一些要求。但是谢谢你的图书馆。非常简单。你不能在一个公共的maven存储库中添加你的maven jar吗?我不想添加额外的存储库。上次我查看时,在maven central中添加一些东西真的很麻烦。因为jcenter是maven central的超集,所以这是获得广泛分布的最简单方法。但任何公关都是受欢迎的!是的,要把它放在Maven回购协议上有一些要求。但是谢谢你的图书馆。很简单,见
class ...
private PGPSecretKeyRingCollection secretKeyRings = new PGPSecretKeyRingCollection(EMPTY_LIST);
...
/**
* Add a new secret keyring to the public keyrings.
* .
* Can read the result of "gpg --export" and "gpg --export -a keyid"
* .
* E.g. "gpg --export-secret-key -a keyid":
* addSecretKey("-----BEGIN PGP PRIVATE KEY BLOCK----- ....".getBytes("US-ASCII")
* <p>
* The password is queried via the callback (decryptionSecretKeyPassphraseForSecretKeyId).
*
* @param encodedPrivateKey the key ascii armored or binary
* @throws IOException IO is dangerous
* @throws PGPException E.g. this is nor a valid key
*/
public void addSecretKey(byte[] encodedPrivateKey) throws IOException, PGPException {
if (encodedPrivateKey == null) {
throw new NullPointerException("encodedPrivateKey must not be null");
}
try (
final InputStream raw = new ByteArrayInputStream(encodedPrivateKey);
final InputStream decoded = org.bouncycastle.openpgp.PGPUtil.getDecoderStream(raw)
) {
PGPSecretKeyRing pgpPrivate = new PGPSecretKeyRing(decoded, getKeyFingerPrintCalculator());
this.secretKeyRings = PGPSecretKeyRingCollection.addSecretKeyRing(this.secretKeyRings, pgpPrivate);
}
}
final PGPSecretKeyRingCollection pgpSec = ...
final PGPSecretKey encryptedKey = pgpSec.getSecretKey(keyID);
/**
* Decrypt an encrypted PGP secret key.
*
* @param encryptedKey An encrypted key
* @param passphrase The passphrase for the key
* @return the decrypted secret key
* @throws PGPException E.g. wrong passphrase
*/
public static PGPPrivateKey extractPrivateKey(PGPSecretKey encryptedKey, final char[] passphrase) throws PGPException {
LOGGER.debug("Extracting secret key with key ID '0x{}'", Long.toHexString(encryptedKey.getKeyID()));
PGPDigestCalculatorProvider calcProvider = new JcaPGPDigestCalculatorProviderBuilder()
.setProvider(BouncyCastleProvider.PROVIDER_NAME).build();
PBESecretKeyDecryptor decryptor = new JcePBESecretKeyDecryptorBuilder(
calcProvider).setProvider(BouncyCastleProvider.PROVIDER_NAME)
.build(passphrase);
return encryptedKey.extractPrivateKey(decryptor);
}