次のデータがあります。
-----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に保存するにはどうすればよいですか?
答え1
基本暗号化基本要素は似ていますが、鍵を含むPGPファイル(パケット)の形式は、OpenSSLで使用される形式(主にASN.1およびPEM)とは大きく異なります。おっしゃったわけではありませんが、RSA鍵のようです。 Javaが適切な場合は、BCPROVとBCPKIX(PEM用)とBCPG(PGP用)を使用してこれを実行できます。http://www.bouncycastle.org。お名前などをお好みに合わせて調整してください。
// パッケージなし import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.OutputStream; import java.security.InvalidKeyException; import java.security.KeyFactory; java.security.KeyPairのインポート; import java.security.NoSuchProviderException; java.security.Securityのインポート; import 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のインポート; import 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 ペアに変換する単純なユーティリティクラスです。 * <血> *使用法:UnixSE276317 [-a] IDとパスワードでPEMを入力してください。 * <血> * ここで、ID は公開鍵に関連付けられた名前です。鍵が配置されました * -a(armor) が指定されている場合は {pub,secret}.asc ファイルにあり、そうでない場合は .bpg です。 */ //自己パッケージ化されたorg.bouncycastle.openpgp.examplesクラスRSAPrivateKeyGeneratorの変更 公開クラス UnixSE276317 { プライベート静的無効なエクスポートキーペア( 出力ストリーム secretOut, 出力ストリーム公開出力、 キーペア、 文字列ID、 文字[]パスワード、 ボアアーマー) IOException, InvalidKeyException, NoSuchProviderException, SignatureException, PGPException 発生 { もし(鎧) { SecretOut = new ArmoredOutputStream(secretOut); } PGPDigestCalculator sha1Calc = new JcaPGPDigestCalculatorProviderBuilder().build().get(HashAlgorithmTags.SHA1); PGPKeyPair keyPair = new JcaPGPKeyPair(PGPPublicKey.RSA_GENERAL、右、new Date()); PGPSecretKey SecretKey = 新しい PGPSecretKey(PGPSignature.DEFAULT_CERTIFICATION, keyPair, ID, sha1Calc, null, null, 新しい JcaPGPContentSignerBuilder(keyPair.getPublicKey().getAlgorithm(), HashAlgorithmTags.SHA1), 新しい JcePBESecretKeyEncryptorBuilder(PGPEncryptedData.CAST5, sha1Calc).setProvider("BC").build(passPhrase)); SecretKey.encode(secretOut); SecretOut.close(); もし(鎧) { publicOut = new ArmoredOutputStream(publicOut); } PGPPublicKey キー = SecretKey.getPublicKey(); key.encode(publicOut); publicOut.close(); } 公開静的無効メイン( 文字列[]パラメータ) 例外を投げる { Security.addProvider(new BouncyCastleProvider()); //KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA", "BC"); //kpg.initialize(1024); //キーペアkp = kpg.generateKeyPair(); int フラグ = args.length > 0 && args[0].equals("-a")? 1:0; if (args.length!= フラグ+3) { System.out.println("UnixSE276317 [-a] IDとパスワードでPEMを入力してください。"); system.exit(0); } // org.bouncycastle.openssl.PEMParser$PrivateKeyParser+RSAKeyPairParserで適用 FileReader rdr = new FileReader(args[flag+2]); PrivateKeyInfo pk8 = (PrivateKeyInfo) new 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.getPublicExComponent()); KeyPair kp =新しいKeyPair(fact.generatePublic(pubSpec)、fact.generatePrivate(privSpec)); String []サフィックス = {"bpg","asc"}; FileOutputStream out1 = new FileOutputStream("秘密" + サフィックス [フラグ]); FileOutputStream out2 = new FileOutputStream("pub."+suffix[flag]); エクスポートKeyPair(out1、out2、kp、args [flag + 0]、args [flag + 1]。toCharArray()、flag> 0); } }
答え2
関連回答が投稿されたようです。grub efi キーは次のとおりです。 そしてこのリンクPEMの内容を見る方法働くことができる
openssl x509 -inform DER -in /var/lib/shim-signed/mok/MOK.der -outform PEM -out ~/MOK_certificate.pem
このエクスポートとインポートはカットして貼り付けるのと同じくらい簡単です。
openssl x509 -in certificate.pem -text