Nun ich sitze schon seit mehreren Tagen an diesem Problem und vermutlich bin ich etwas Betriebsblind geworden.
mit dem Programmcode den ich hier Poste teste ich ein ver und entschlüsselung von einem 320 Bytes langen verschlüsselten Byte-array welches auch genau fehlerfrei übertragen wird. Nur läßt es sich am Handy entschlüsseln jedoch nicht in PHP oder lokal.
Also das zu verschlüsselnde Bytearray b enthält nur 5 Bytes, ich arbeite nur mit Byte-arrays um keine Probleme Zeichenkodierung zu bekommen:
54,53,53,51,55
private Cipher cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byteBufferEncrypt = new byte[320];
cipher.doFinal(b, 0, b.length, byteBufferEncrypt);
// Debug - test ob entschlüsseln wieder geht:
// byteBufferEncrypt enthält nun 320 verschlüsselte Bytes (entspricht verschlüsselungsstärke 320*8 bits vom Schlüssel)
// diese 320 Bytes habe ich genau gleich am Handy und am PC an dieser Stelle
// String s enthält den privaten Schlüssel, hier abgekürzt
try {
String s = "MIIF3g.....";
byte [] encoded = Base64.decode(s, Base64.DEFAULT);
PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(encoded);
KeyFactory fact = KeyFactory.getInstance("RSA");
RSAPrivateKey debugprivateKey = (RSAPrivateKey) fact.generatePrivate(privateKeySpec);
Cipher CheckCipher = Cipher.getInstance("RSA");
CheckCipher.init(Cipher.DECRYPT_MODE, debugprivateKey );
byte[] Test = CheckCipher.doFinal(byteBufferEncrypt);
Test.toString();
// Am handy klappt es soweit, am PC schmiert er bei doFinal ab.
} catch (NoSuchAlgorithmException | InvalidKeySpecException | NoSuchPaddingException e) {
e.printStackTrace();
}
Vom Debuggen bekomme ich am ende in den Variablen "Test" wieder meine 5 Bytes vom Anfang und ich schreibe die Variable byteBufferEncrypt in eine Datei, diese ist genau 320 Bytes lang (wie auch die die Stärke der Verschlüsselung)
Ich habe die Datei auf meinen PC kopiert und kann sie auch mit dem richtigen privaten Schlüssel nicht mehr entschlüsseln...
Ich habe zuerst gedacht die Datei wird vielleicht falsch kopiert, aber aktuell sehe ich das die 320 Bytes vom genau gleich sind und auch der private Schlüssel gleich ist, der Programmcode ist komplett kopiert (die Try-anweisung) und dennoch geht es nicht.
hat irgendwer noch eine Idee?
Danke
René