Ich schreibe gerade einen verschlüsselten Messaging-Dienst in Java, und ich verwende die Bouncycastle PGP-Bibliothek. Ich habe ein Testprogramm geschrieben, das ein Schlüsselpaar generiert und eine Nachricht verschlüsselt/entschlüsselt. Das hat eine Weile funktioniert, aber es hat kürzlich in der Entschlüsselungsstufe aufgehört und mir eine InvalidKeyException gegeben.Bouncycastle PGP-Verschlüsselungsfehler Illegal Key Size
Ich habe einige Nachforschungen angestellt und die JCE-.jar-Dateien heruntergeladen und in mein Projekt importiert (über Eclipse-Projekt -> Eigenschaften -> externe JARs hinzufügen). Ich sah, dass sie für Windows-Benutzer in einen bestimmten Ordner in der Java-Bibliothek gelegt werden sollten, aber ich konnte keinen ähnlichen auf meinem Mac finden. Ich habe versucht, den Ordner usr/library durchzusehen, konnte aber nichts Nützliches finden.
Hat jemand dieses Problem auf Mac gelöst?
EDIT: Hier ist ein Code von meiner Haupt-Testfunktion
// decrypt
byte[] decrypted = PGPEncryptDecrypt.decrypt(encFromFile, secKey, pass.toCharArray());
Hier ist meine decrypt-Methode (das nicht von mir geschrieben wurde, aber ich habe eine PGPEncryptDecrypt Klasse im Zusammenhang statische Methoden zu halten, und es funktionierte für mich)
public static byte[] decrypt(byte[] encrypted, InputStream keyIn, char[] password)
throws IOException, PGPException, NoSuchProviderException {
InputStream in = new ByteArrayInputStream(encrypted);
in = PGPUtil.getDecoderStream(in);
PGPObjectFactory pgpF = new PGPObjectFactory(in);
PGPEncryptedDataList enc = null;
Object o = pgpF.nextObject();
//
// the first object might be a PGP marker packet.
//
if (o instanceof PGPEncryptedDataList) {
enc = (PGPEncryptedDataList) o;
} else {
enc = (PGPEncryptedDataList) pgpF.nextObject();
}
//
// find the secret key
//
Iterator it = enc.getEncryptedDataObjects();
PGPPrivateKey sKey = null;
PGPPublicKeyEncryptedData pbe = null;
PGPSecretKeyRingCollection pgpSec = new PGPSecretKeyRingCollection(
PGPUtil.getDecoderStream(keyIn));
while (sKey == null && it.hasNext()) {
pbe = (PGPPublicKeyEncryptedData) it.next();
sKey = findSecretKey(pgpSec, pbe.getKeyID(), password);
}
if (sKey == null) {
throw new IllegalArgumentException(
"secret key for message not found.");
}
InputStream clear = pbe.getDataStream(sKey, "BC");
PGPObjectFactory pgpFact = new PGPObjectFactory(clear);
PGPCompressedData cData = (PGPCompressedData) pgpFact.nextObject();
pgpFact = new PGPObjectFactory(cData.getDataStream());
PGPLiteralData ld = (PGPLiteralData) pgpFact.nextObject();
InputStream unc = ld.getInputStream();
ByteArrayOutputStream out = new ByteArrayOutputStream();
int ch;
while ((ch = unc.read()) >= 0) {
out.write(ch);
}
byte[] returnBytes = out.toByteArray();
out.close();
return returnBytes;
}
die Fehlerpunkte auf dem findSecretKey (in PGPEncryptDecrypt Klasse) -Methode, die
public static PGPPrivateKey findSecretKey(
PGPSecretKeyRingCollection pgpSec, long keyID, char[] pass)
throws PGPException, NoSuchProviderException {
PGPSecretKey pgpSecKey = pgpSec.getSecretKey(keyID);
if (pgpSecKey == null) {
return null;
}
return pgpSecKey.extractPrivateKey(pass, "BC");
}
wie folgt ist
Diese Funktionen funktionierten alle perfekt, als ich sie zum ersten Mal implementierte, aber sie funktionierten nicht mehr.
Bitte fügen Sie einen Code für den Abschnitt kopieren Befehle, wo die Ausnahme ist geworfen –