RSA-Entschlüsselung mit dem öffentlichen Schlüssel
Habe ich einige Entschlüsselung Probleme in mein Android-Projekt.
Ich bin immer ein string, unterzeichnet mit einem privaten Schlüssel und ich haben zu überprüfen(decrypt) mit einem öffentlichen Schlüssel.
Ich würde gerne genau das gleiche Ergebnis als wenn ich über eine PHP-Funktion - openssl_public_decrypt ( http://php.net/manual/pl/function.openssl-public-decrypt.php )
Ich habe dazu in meinem Java-Projekt, so kann ich mit Java-libs (e.g BouncyCastle, oder etwas anderes, irgendwelche Empfehlungen? )
Irgendwelche Ideen wie man dieses Problem lösen?
Ok, hier ist mein code.
Ich bin immer der öffentliche Schlüssel, wie diese
PEMReader reader = new PEMReader(new InputStreamReader(ctx
.getAssets().open("pubkey.pem")));
Object obj;
while ((obj = reader.readObject()) != null) {
if (obj instanceof RSAPublicKey) {
pubKey = (RSAPublicKey) obj;
return pubKey;
}
}
Und ich bekomme immer den öffentlichen Schlüssel ohne Probleme.
Cipher c = Cipher.getInstance("RSA/NONE/NoPadding", "SC");
c.init(Cipher.DECRYPT_MODE, pubKey);
byte[] result = c.doFinal(data_to_decrypt.getBytes());
Sowie als ein Ergebnis(nach Umwandlung von bytes in string) bekomme ich 022c06571c6a263b389fcd93159cb311abb880bddf51b7c916dd1ae...
wo php-Funktionen zurück
sd8dsa348acvcx87|00454|OK|15000|CDE
- und das ist eine korrekte Ausgabe.
Wie ich schon sagte, ich versuche, Daten zu entschlüsseln mit public key
Sie nicht entschlüsseln von Daten mit einem öffentlichen Schlüssel, es macht keinen Sinn (trotz der schlechten Namensgebung Wahl von PHP). "ich bin immer ein string verschlüsselt mit einem privaten Schlüssel": das macht wirklich keinen Sinn. Es ist signiert am besten. Zugegeben, mit RSA es wird mehr oder weniger die gleichen Operationen (aber das wäre nicht der Fall für DSA). Das problem ist, dass die Unterzeichnung der Meldung wird mit ziemlicher Sicherheit an einen hash, so dass immer die original-Nachricht ist unmöglich.
Ok, also lassen Sie uns davon ausgehen, dass die string-signiert ist, wie kann ich dies überprüfen ?
Wissen Sie mehr über die Signatur? Welcher hash-Algorithmus verwendet wurde, zum Beispiel
RSAwithSHA1
?
InformationsquelleAutor Mike | 2012-04-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Java hat Java Cryptography Extension Framework ist nur ausgelegt für diese Dinge.
BouncyCastle ist ein Kryptographie-Provider für diesen Rahmen. Das bedeutet, es liefert Ihr die Java Cryptography Extension mit Implementierungen von Kryptographie-algorithmen.
Finden Sie die grundlegenden Klassen für diese in den Paketen
java.security
undjavax.crypto
Entschlüsseln Sie Ihre Nachricht mit einem öffentlichen Schlüssel, den Sie könnten versuchen, die folgenden:
Bitte beachten Sie, dass dieses Beispiel sehr basic und fehlt mehrere try-catch-Blöcke. Auch, sollten Sie nicht verwenden eine asymmetrische Chiffre, ohne Polsterung, da dies macht Sie anfällig für replay-Angriffe. Sie können auch auftreten, Probleme mit der Schlüssellänge. In einigen Java-Pakete, die maximal zulässige Schlüssellänge ist eingeschränkt. Dies kann gelöst werden, indem die unlimited strength policy files.
Ich hoffe, dies hilft Ihnen, in erste Schritte mit der Java cryptography.
Die Methode gibt einen byte-array. Hast du konvertieren Sie das Ergebnis in ein String? Auch ich habe gerade erkennen, dass ich nicht zuordnen das Ergebnis der doFinal-Methode einer Variablen... gehen Sie zum Bearbeiten der Antwort...
Ich konvertieren Sie das Ergebnis in einen String und die Ausgabe von meinem vorherigen Kommentar ist eine Zeichenfolge konvertiert array of Byte
Ich Editiere meinen ersten post, und fügen Sie einige code, vielleicht wird es hilfreich sein bei der Suche nach der Lösung.
KeyFactory X. 509 Implementierung nicht gefunden
InformationsquelleAutor Francis