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

Schreibe einen Kommentar