다음과 같은 데이터가 있습니다.
-----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