나는이 모든 것을 극도로 새로운 것이라고 말함으로써 시작하겠습니다. 내가 뭘하려는 건 암호화 된 파일을 해독하기 위해 Java에서 gpg를 사용하는 것입니다.Java (Bouncy Castle)에서 작업하려면 GPG 암호 해독 받기
내가 성공적으로 완료 한 것 :
- 가 동료가 내 공개 키와 자신의 개인 키를 사용하여 파일을 암호화했고 성공적으로 해독. (예상대로)
내 키는 다음과 같이 생성 된 실패 ... :
GPG --gen-지맥
을 (GPG의 --version 내가 1.4.5를 사용하고 있는데 나는 탄력이 성 1.47를 사용하고 알려줍니다)"DSA 및 엘가 말 (기본값)"옵션 선택
다른 필드를 채우고 키를 생성하십시오.
파일이 내 공개 키와 다른 사람의 비밀 키를 사용하여 암호화되었습니다. 나는 그것을 해독하고 싶다. 이를 수행하기 위해 다음 Java 코드를 작성했습니다. 몇 가지 사용되지 않는 메소드를 사용하고 있지만, 비 deprecated 버전을 사용하는 데 필요한 팩토리 메소드를 올바르게 구현하는 방법을 알 수 없으므로 누구나 사용할 수 있어야하는 구현에 대한 아이디어가 있다면 좋은 보너스.
알고리즘 : DSA 형식 :이 코드를 실행하면
Security.addProvider(new BouncyCastleProvider());
PGPSecretKeyRingCollection secretKeyRing = new PGPSecretKeyRingCollection(new FileInputStream(new File("test-files/secring.gpg")));
PGPSecretKeyRing pgpSecretKeyRing = (PGPSecretKeyRing) secretKeyRing.getKeyRings().next();
PGPSecretKey secretKey = pgpSecretKeyRing.getSecretKey();
PGPPrivateKey privateKey = secretKey.extractPrivateKey("mypassword".toCharArray(), "BC");
System.out.println(privateKey.getKey().getAlgorithm());
System.out.println(privateKey.getKey().getFormat());
PGPObjectFactory pgpF = new PGPObjectFactory(
new FileInputStream(new File("test-files/test-file.txt.gpg")));
Object pgpObj = pgpF.nextObject();
PGPEncryptedDataList encryptedDataList = (PGPEncryptedDataList) pgpObj;
Iterator objectsIterator = encryptedDataList.getEncryptedDataObjects();
PGPPublicKeyEncryptedData publicKeyEncryptedData = (PGPPublicKeyEncryptedData) objectsIterator.next();
InputStream inputStream = publicKeyEncryptedData.getDataStream(privateKey, "BC");
그래서 나는 나의 비밀 키에 대해 다음과 같이 내 알고리즘과 형식이라는 것을 배울 PKCS # 8
그리고 그것은에 나누기 마지막 줄 :
Exception in thread "main" org.bouncycastle.openpgp.PGPException: error setting asymmetric cipher
at org.bouncycastle.openpgp.operator.jcajce.JcePublicKeyDataDecryptorFactoryBuilder.decryptSessionData(Unknown Source)
at org.bouncycastle.openpgp.operator.jcajce.JcePublicKeyDataDecryptorFactoryBuilder.access$000(Unknown Source)
at org.bouncycastle.openpgp.operator.jcajce.JcePublicKeyDataDecryptorFactoryBuilder$2.recoverSessionData(Unknown Source)
at org.bouncycastle.openpgp.PGPPublicKeyEncryptedData.getDataStream(Unknown Source)
at org.bouncycastle.openpgp.PGPPublicKeyEncryptedData.getDataStream(Unknown Source)
at org.bouncycastle.openpgp.PGPPublicKeyEncryptedData.getDataStream(Unknown Source)
at org.bouncycastle.openpgp.PGPPublicKeyEncryptedData.getDataStream(Unknown Source)
at TestBouncyCastle.main(TestBouncyCastle.java:74)
에 의해 발생 : java.security.InvalidKeyException : org.bouncyc에서 엘가 에 전달 알 수없는 키 유형 astle.jcajce.provider.asymmetric.elgamal.CipherSpi.engineInit (알 수없는 소스) org.bouncycastle.jcajce.provider.asymmetric.elgamal.CipherSpi.engineInit (알 수없는 소스) at javax.crypto.Cipher.init (DashoA13 * ..) javax.crypto.Cipher.init (DashoA13 * ..) ...에서 8 개
GPG를 사용하지 않는 "에서 내가 여기에서 많은 추천을 열려있어, 배 대신 사용 "성기사를 사용하지 말고 대신 x를 사용하십시오. 감사!
+1 Ewwwwwwwwww;) –
-1 명백한 이유로. 또한 암호문은 통화 도중 활성 프로세스 목록을 보는 모든 사용자에게 표시 될 수 있으며 시스템 로그에서도 종료 될 수 있습니다. – user359996