In .NET habe ich die folgende öffentliche Schlüsseldatei generiert:Warum gibt mir meine Java RSA-Verschlüsselung eine arithmetische Ausnahme?
<RSAKeyValue>
<Modulus>xTSiS4+I/x9awUXcF66Ffw7tracsQfGCn6g6k/hGkLquHYMFTCYk4mOB5NwLwqczwvl8HkQfDShGcvrm47XHKUzA8iadWdA5n4toBECzRxiCWCHm1KEg59LUD3fxTG5ogGiNxDj9wSguCIzFdUxBYq5ot2J4iLgGu0qShml5vwk=</Modulus>
<Exponent>AQAB</Exponent>
</RSAKeyValue>
.NET ist glücklich, es ist normal, Methoden zur Verschlüsselung verwendet wird.
Ich versuche, diesen Schlüssel zu verwenden, um eine Zeichenfolge in Java zu codieren. Ich stoße auf eine arithmetische Ausnahme, wenn ich versuche, die Zeichenfolge zu verschlüsseln.
Im Folgenden ist der Code, den ich zu verschlüsseln bin mit:
byte[] modulusBytes = Base64.decode(this.getString(R.string.public_key_modulus));
byte[] exponentBytes = Base64.decode(this.getString(R.string.public_key_exponent));
BigInteger modulus = new BigInteger(modulusBytes);
BigInteger exponent = new BigInteger(exponentBytes);
RSAPublicKeySpec rsaPubKey = new RSAPublicKeySpec(modulus, exponent);
KeyFactory fact = KeyFactory.getInstance("RSA");
PublicKey pubKey = fact.generatePublic(rsaPubKey);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
byte[] cipherData = cipher.doFinal(new String("big kitty dancing").getBytes());
Es ist die letzte Zeile in dem Codeblock, der fehlschlägt.
Ich habe mir zahlreiche Beispiele angesehen und das ist das Beste, was ich mir vorstellen konnte. Wenn es nicht offensichtlich ist, ist der R.string.public_key_modul ein Kopieren/Einfügen des Textes in dem Modulus-Element, das gleiche gilt für den Exponenten.
Was habe ich falsch gemacht?
ja, das hat es schön gelöst, danke für die schnelle Antwort! – badMonkey