GPG从Java解密平面文件

时间:2016-10-24 07:16:30

标签: java encryption gnupg

我对Java很新。 我有一个平面文件,我用Unix中的GPG实用程序存储了我的密码。现在,我想在连接到系统之前读取文件并将密码输入字符串。 我已阅读帖子Getting GPG Decryption To Work In Java (Bouncy Castle),但我无法使用该程序,因为它在PGPSecretKey之前添加@并删除令牌等错误。 基本上我不知道将java方法放在我的项目中的哪个位置。

以下是我的代码:

package jcpx.oracle.apps.gpg;

import org.bouncycastle.apache.*;
import org.bouncycastle.apache.bzip2.*;
import org.bouncycastle.bcpg.*;
import org.bouncycastle.bcpg.attr.*;
import org.bouncycastle.bcpg.sig.*;
import org.bouncycastle.openpgp.*;

private PGPSecretKey readSecretKey(InputStream in) throws IOException, PGPException {
in = PGPUtil.getDecoderStream(in);
PGPSecretKeyRingCollection pgpSec = new PGPSecretKeyRingCollection(in,
        new BcKeyFingerprintCalculator());

PGPSecretKey key = null;
for (Iterator<PGPSecretKeyRing> it = pgpSec.getKeyRings(); key == null && it.hasNext();) {
    PGPSecretKeyRing kRing = it.next();

    for (Iterator<PGPSecretKey> it2 = kRing.getSecretKeys(); key == null
            && it2.hasNext();) {
        PGPSecretKey k = it2.next();
        if ((keyId == null) && k.isSigningKey()) {
            key = k;
        }
        if ((keyId != null)
                && (Long.valueOf(keyId, 16).longValue() == (k.getKeyID() & MASK))) {
            key = k;
        }
    }
}

if (key == null) {
    throw new IllegalArgumentException("Can't find encryption key"
            + (keyId != null ? " '" + keyId + "' " : " ") + "in key ring.");
}

return key;
}

1 个答案:

答案 0 :(得分:0)

如果没有足够的上下文(例如错误,输入文件),调试代码很困难。

如果您的问题仍未解决,请在此处查看此答案:https://stackoverflow.com/a/42652115/7550201