RSA-Verschlüsselung: Unterschied zwischen Java und Android
Ich bin mit RSA zum verschlüsseln von Benutzernamen und Kennwort auf Android-und Entschlüsselung auf dem server (tomcat 6, java 1.6).
Android-Verschlüsselung:
PublicKey pubKey = readPublicKeyFromFile(mod, ex);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
byte[] cipherData = cipher.doFinal(data);
return cipherData;
Java-Tomcat-Entschlüsselung:
PrivateKey pubKey = readPrivateKeyFromFile(mod, ex);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, pubKey);
byte[] cipherData = cipher.doFinal(data);
return cipherData;
Wenn ich den android-Teil, AUßERHALB von android (Nur in einer main-Methode) funktioniert es einwandfrei. Aber nicht in meinem android (Emulator). Auf de server-Seite bekomme ich folgende Fehlermeldung:
javax.crypto.BadPaddingException: Blocktype mismatch: 0
at sun.security.rsa.RSAPadding.unpadV15(RSAPadding.java:311)
at sun.security.rsa.RSAPadding.unpad(RSAPadding.java:255)
at com.sun.crypto.provider.RSACipher.a(DashoA13*..)
at com.sun.crypto.provider.RSACipher.engineDoFinal(DashoA13*..)
at javax.crypto.Cipher.doFinal(DashoA13*..)
Halte ich den mod und ex BigIntegers als Konstanten, also ich glaube nicht, Schreibe Sie in eine Datei.
Ich weiß, dass es Unterschied zwischen java1.6 und java-1.5-Verschlüsselung, so sind beide kompiliert mit java 1.6.
Einige debug-info:
Beim Debuggen in android kann ich sehen, dass pubKey enthält modulus und exponent in hexadezimal. Und wenn ich debug in einer main-Methode (wieder der gleiche code ist), kann ich sehen, dass pubKey enthält modulus und exponent im Dezimalsystem.
Was mache ich falsch?
Dank
InformationsquelleAutor der Frage Ungoogleable | 2011-05-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Im tut RSA Verschlüsseln " in Android 2.2+ und entschlüsseln auf einem tomcat 6, java 1.6-server.
War ich immer genau dieses problem, Lesen Sie alle über dem Platz und zum Teil Dank @Femi 's Antwort kam ich über das, was ich brauchte.
Die Lösung war die Verwendung des folgenden Algorithmus Spezifikation für die Chiffre:
Diese Werke tun, die Verschlüsselung von Android-und BlackBerry-smartphones. Ich weiß, das ist schon vier Monate her, seit die Frage gestellt wurde, aber nur für den Fall, jemand geht durch dieses problem.
InformationsquelleAutor der Antwort blindstuff
Ich schlage vor, Sie verwenden bestimmte cipher-Initialisierung: als ein Beispiel,
funktioniert auf beiden. Die Ausnahme, Sie werden immer (BadPaddingException) auftreten, weil die Standard-cipher initialization Polsterung scheint anders zu sein zwischen den desktop-JVM und die Android-JVM.
InformationsquelleAutor der Antwort Femi
Erstens, es sieht aus wie du bist initialisieren sowohl chiffriert mit dem öffentlichen Schlüssel. Verschlüsselung mit öffentlichem Schlüssel Entschlüsselung verwendete private Schlüssel. Ich hoffe, dass das nur ein Tippfehler ist wenn.
Hatte ich eine Menge ärger mit RSA-Verschlüsselung als gut, war viel trial und error. Ich schlage vor, Sie versuchen einen anderen provider. Ich schaffte es zum implementieren von RSA mit BouncyCastle.
Obwohl, generiert ich mein eigenes Schlüsselpaar zu erstellen, da dies das session-Verschlüsselung.
InformationsquelleAutor der Antwort Jeremy Jem Lee