如何将PEM格式的密钥(不是OpenPGP)导入GPG?

r

我有这样的数据:

-----BEGIN PRIVATE KEY-----
MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQDPzCORz9kUh4yt
73fiG1amQ16jwjXNzNO0d4xUWlrCP3dTfXnvtF35r2N/5Nefw9CcztBUAZACbwtn
(... just sample data ...)
jSYDRr88RZI4QYv9pW0+A8vWS2SJnIPW0fP9mcPOdZXxG/V2rL03YV5xcLCdbuBu
1tunEWZ5VcjfyEDfP7qZdWjGIYselOg=
-----END PRIVATE KEY-----

如果我运行gpg --import它说:

gpg: no valid OpenPGP data found.
gpg: Total number processed: 0

我怎样才能把这个私钥加入到GPG中?

dave_thompson_085

尽管底层的加密原语相似,但包含密钥的PGP文件(数据包)格式与OpenSSL使用的格式(主要是ASN.1和PEM)有很大不同。您无需这么说,但这似乎是RSA密钥。如果Java对您来说还可以,那么可以使用BCPROV以及来自http://www.bouncycastle.org的BCPROIX和BCPKIX(对于PEM)和BCPG(对于PGP)来实现调整名称等以品尝。

// nopackage
导入java.io.FileOutputStream;
导入java.io.FileReader;
导入java.io.IOException;
导入java.io.OutputStream;
导入java.security.InvalidKeyException;
导入java.security.KeyFactory;
导入java.security.KeyPair;
导入java.security.NoSuchProviderException;
导入java.security.Security;
导入java.security.SignatureException;
导入java.security.spec.KeySpec;
导入java.security.spec.PKCS8EncodedKeySpec;
导入java.security.spec.RSAPublicKeySpec;
导入java.util.Date;
导入org.bouncycastle.asn1.ASN1Sequence;
导入org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
导入org.bouncycastle.bcpg.ArmoredOutputStream;
导入org.bouncycastle.bcpg.HashAlgorithmTags;
导入org.bouncycastle.jce.provider.BouncyCastleProvider;
导入org.bouncycastle.openpgp.PGPEncryptedData;
导入org.bouncycastle.openpgp.PGPException;
导入org.bouncycastle.openpgp.PGPKeyPair;
导入org.bouncycastle.openpgp.PGPPublicKey;
导入org.bouncycastle.openpgp.PGPSecretKey;
导入org.bouncycastle.openpgp.PGPSignature;
导入org.bouncycastle.openpgp.operator.PGPDigestCalculator;
导入org.bouncycastle.openpgp.operator.jcajce.JcaPGPContentSignerBuilder;
导入org.bouncycastle.openpgp.operator.jcajce.JcaPGPDigestCalculatorProviderBuilder;
导入org.bouncycastle.openpgp.operator.jcajce.JcaPGPKeyPair;
导入org.bouncycastle.openpgp.operator.jcajce.JcePBESecretKeyEncryptorBuilder;
导入org.bouncycastle.openssl.PEMParser;

/ **
 *一个简单的实用程序类,它将PEM PKCS8(OpenSSL)转换为RSA PGPPublicKey / PGPSecretKey对。
 * <p>
 *用法:UnixSE276317 [-a]身份passPhrase输入PEM
 * <p>
 *其中,identity是与公钥关联的名称。按键已放置
 *如果指定了-a(装甲),则在{pub,secret} .asc文件中为*,否则为.bpg。
 * /
//从org.bouncycastle.openpgp.examples包修改而来的RSAPrivateKeyGenerator类 
公共类UnixSE276317
{
    私有静态无效exportKeyPair(
        OutputStream secretOut,
        OutputStream publicOut,
        KeyPair对,
        字符串身份,
        char [] passPhrase,
        布尔装甲)
        引发IOException,InvalidKeyException,NoSuchProviderException,SignatureException,PGPException
    {    
        如果(装甲)
        {
            secretOut =新的ArmoredOutputStream(secretOut);
        }

        PGPDigestCalculator sha1Calc = new JcaPGPDigestCalculatorProviderBuilder()。build()。get(HashAlgorithmTags.SHA1);
        PGPKeyPair keyPair =新的JcaPGPKeyPair(PGPPublicKey.RSA_GENERAL,对,新的Date());
        PGPSecretKey secretKey =新的PGPSecretKey(PGPSignature.DEFAULT_CERTIFICATION,keyPair,identity,sha1Calc,null,null, 
                新的JcaPGPContentSignerBuilder(keyPair.getPublicKey()。getAlgorithm(),HashAlgorithmTags.SHA1), 
                新的JcePBESecretKeyEncryptorBuilder(PGPEncryptedData.CAST5,sha1Calc).setProvider(“ BC”)。build(passPhrase));

        secretKey.encode(secretOut);

        secretOut.close();

        如果(装甲)
        {
            publicOut =新的ArmoredOutputStream(publicOut);
        }

        PGPPublicKey key = secretKey.getPublicKey();

        key.encode(publicOut);

        publicOut.close();
    }

    public static void main(
        字符串[]参数)
        抛出异常
    {
        Security.addProvider(new BouncyCastleProvider());

        // KeyPairGenerator kpg = KeyPairGenerator.getInstance(“ RSA”,“ BC”);

        //kpg.initialize(1024);

        // KeyPair kp = kpg.generateKeyPair();

        int flag = args.length> 0 && args [0] .equals(“-a”)?1:0;

        如果(args.length!= flag + 3)
        {
            System.out.println(“ UnixSE276317 [-a] identity passPhrase inputPEM”);
            System.exit(0);
        }

        //改编自org.bouncycastle.openssl.PEMParser $ PrivateKeyParser + RSAKeyPairParser
        FileReader rdr =新的FileReader(args [flag + 2]);
        PrivateKeyInfo pk8 =(PrivateKeyInfo)新的PEMParser(rdr).readObject();
        rdr.close(); 
        ASN1Sequence seq =(ASN1Sequence)pk8.parsePrivateKey();
        org.bouncycastle.asn1.pkcs.RSAPrivateKey keyStruct = org.bouncycastle.asn1.pkcs.RSAPrivateKey.getInstance(seq);
        KeyFactory事实= KeyFactory.getInstance(“ RSA”);
        KeySpec privSpec =新的PKCS8EncodedKeySpec(pk8.getEncoded());
        KeySpec pubSpec = new RSAPublicKeySpec(keyStruct.getModulus(),keyStruct.getPublicExponent());
        KeyPair kp =新的KeyPair(fact.generatePublic(pubSpec),fact.generatePrivate(privSpec));

        String []后缀= {“ bpg”,“ asc”};
        FileOutputStream out1 =新的FileOutputStream(“ secret。” +后缀[flag]);
        FileOutputStream out2 =新的FileOutputStream(“ pub。” +后缀[flag]);
        exportKeyPair(out1,out2,kp,args [flag + 0],args [flag + 1] .toCharArray(),flag> 0);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将私钥导入GPG,使其成为默认密钥?

来自分类Dev

如何将私钥导入GPG,使其成为默认密钥?

来自分类Dev

如何将.pem和.key一起导入密钥库(.jks)

来自分类Dev

如何将PEM密钥转换为RSA密钥对?

来自分类Dev

如何将 gpg 与 GNOME 密钥环集成?

来自分类Dev

将私钥从pem文件导入密钥库

来自分类Dev

如何将SSH密钥从iPhone导入到MacOS?

来自分类Dev

如何将base 64编码的公共密钥(.pem)转换为bytearray?

来自分类Dev

如何将SAS格式文件导入R?

来自分类Dev

如何针对一组公共密钥块检查openpgp(gpg)签名

来自分类Dev

如何不导入而显示gpg密钥详细信息?

来自分类Dev

如何将Pem私钥转换为可在.NET中使用的Windows的格式

来自分类Dev

如何将二进制私钥文件转换为openssl可接受的pem格式

来自分类Dev

如何将原始模数和指数转换为RSA公钥(.pem格式)

来自分类Dev

如何将SSH公钥从PEM转换为DER格式?

来自分类Dev

如何将 ObjectHandle 从 Pkcs11Interop 转换为 X509 证书或 Pem 格式?

来自分类Dev

启动板无法导入您的OpenPGP密钥

来自分类Dev

启动板无法导入您的OpenPGP密钥

来自分类Dev

如何撤销旧的OpenPGP密钥?

来自分类Dev

如何将Outlook PST从旧格式转换或导入为新Unicode格式

来自分类Dev

如何将这种excel格式导入到这种数据库格式中?

来自分类Dev

如何将p7s证书链导入密钥库?

来自分类Dev

如何将(自定义)Ubuntu存储库的OpenPGP密钥推送到在Ubuntu服务器上运行的客户端?

来自分类Dev

如何发布GPG密钥?

来自分类Dev

如何在Debian中使用gpg从密钥服务器导入密钥?

来自分类Dev

如何在Debian中使用gpg从密钥服务器导入密钥?

来自分类Dev

Mozilla Thunderbird 如何处理我的密钥,是否可以直接从 gpg 密钥环导入?

来自分类Dev

如何通过keytool将密钥导入密钥存储区

来自分类Dev

如何将Access MDB格式的数据库导入MySQL(utf8_general_ci)?

Related 相关文章

  1. 1

    如何将私钥导入GPG,使其成为默认密钥?

  2. 2

    如何将私钥导入GPG,使其成为默认密钥?

  3. 3

    如何将.pem和.key一起导入密钥库(.jks)

  4. 4

    如何将PEM密钥转换为RSA密钥对?

  5. 5

    如何将 gpg 与 GNOME 密钥环集成?

  6. 6

    将私钥从pem文件导入密钥库

  7. 7

    如何将SSH密钥从iPhone导入到MacOS?

  8. 8

    如何将base 64编码的公共密钥(.pem)转换为bytearray?

  9. 9

    如何将SAS格式文件导入R?

  10. 10

    如何针对一组公共密钥块检查openpgp(gpg)签名

  11. 11

    如何不导入而显示gpg密钥详细信息?

  12. 12

    如何将Pem私钥转换为可在.NET中使用的Windows的格式

  13. 13

    如何将二进制私钥文件转换为openssl可接受的pem格式

  14. 14

    如何将原始模数和指数转换为RSA公钥(.pem格式)

  15. 15

    如何将SSH公钥从PEM转换为DER格式?

  16. 16

    如何将 ObjectHandle 从 Pkcs11Interop 转换为 X509 证书或 Pem 格式?

  17. 17

    启动板无法导入您的OpenPGP密钥

  18. 18

    启动板无法导入您的OpenPGP密钥

  19. 19

    如何撤销旧的OpenPGP密钥?

  20. 20

    如何将Outlook PST从旧格式转换或导入为新Unicode格式

  21. 21

    如何将这种excel格式导入到这种数据库格式中?

  22. 22

    如何将p7s证书链导入密钥库?

  23. 23

    如何将(自定义)Ubuntu存储库的OpenPGP密钥推送到在Ubuntu服务器上运行的客户端?

  24. 24

    如何发布GPG密钥?

  25. 25

    如何在Debian中使用gpg从密钥服务器导入密钥?

  26. 26

    如何在Debian中使用gpg从密钥服务器导入密钥?

  27. 27

    Mozilla Thunderbird 如何处理我的密钥,是否可以直接从 gpg 密钥环导入?

  28. 28

    如何通过keytool将密钥导入密钥存储区

  29. 29

    如何将Access MDB格式的数据库导入MySQL(utf8_general_ci)?

热门标签

归档