Tüm bunlara son derece yeni olduğumu söyleyerek başlayayım. Yapmaya çalıştığım, şifrelenmiş bir dosyanın şifresini çözmek için Java içinden gpg kullanmaktır.GPG Şifre Çözmeyi Alma Java'da Çalışmak İçin (Bouncy Castle)
başarıyla yaptık Ne:
- bir meslektaşım benim ortak anahtar ve onun gizli anahtarını kullanarak bir dosyayı şifrelemek Had ve başarıyla çözdük. (Beklendiği gibi)
Anahtarım böyle oluşturulduğu başarısız ...:
gpg --gen-ley
(gpg version Ben 1.4.5 kullanıyorum ve Bouncy Castle 1.47 kullanıyorum söylüyor)"DSA ve Elgamal (varsayılan)" seçeneğini seçin.
Diğer alanları doldurun ve bir anahtar oluşturun.
Dosya, ortak anahtarım ve başka bir gizli anahtar kullanılarak şifrelenmiştir. Şifresini çözmek istiyorum. Bunu gerçekleştirmek için aşağıdaki Java kodunu yazdım. Bazı kullanım dışı yöntemleri kullanıyorum, ancak kullanım dışı sürümleri kullanmak için gereken fabrika yöntemlerini düzgün bir şekilde nasıl uygulayacağımı anlayamıyorum. güzel bonus.
Algoritma: DSA Biçimi: Bu kodu çalıştırdığınızda
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");
Yani benim gizli anahtar için aşağıdaki gibi benim algoritma ve format olduğunu öğrenmek PKCS 8.
Ve sonra üzerine kırılır son satır:
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)
neden Olduğu: java.security.InvalidKeyException: org.bouncyc de ElGamal'ın geçirilen bilinmeyen anahtar türü org.bouncycastle.jcajce.provider.asymmetric.elgamal.CipherSpi.engineInit (Bilinmeyen Kaynak) at javax.crypto.Cipher.init (DashoA13 *) ..) javax.crypto.Cipher.init (DashoA13 * ..) ... en 8 daha
gpg kullanmayın" dan ben, burada önerilerden bir çok açığım x yerine kullanılacak "Kaleye" kale kullanmayın, yerine x yerine "kullanın. Teşekkürler!
+1 Ewwwwwwwwww;) –
-1 Açık nedenlerle. Ayrıca, parolanız, arama sırasında etkin işlemler listesine bakan herkes tarafından görülebilir ve sistem günlüğüne de girebilir. – user359996