Der folgende Code entschlüsselt wird, wird verwendet, um einen 2048-Bit-RSA-Public/Private Key zu generieren. Der öffentliche Schlüssel wird an die Android-App gesendet, die zum Verschlüsseln einer Nachricht verwendet wird, die am Dienstende entschlüsselt werden soll.generieren RSA-Public-Key auf dem Server, auf Android senden, die eine Nachricht wiederum verschlüsselt und sendet sie zurück an den Server, auf dem es
Bei Verwendung des privaten Schlüssels führte jede Entschlüsselung zu einer fehlerhaften Padding-Ausnahme.
, der folgende Code verwendet wurde, zu verschlüsseln:
Cipher cipher = Cipher.getInstance("RSA");
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(encoded);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey pKey = keyFactory.generatePublic(keySpec);
cipher.init(Cipher.ENCRYPT_MODE, pKey);
encoded = cipher.doFinal(clearText.getBytes());
'Cipher cipher = Cipher.getInstance (" RSA ");'. Verlassen Sie sich nicht auf Standardwerte, sondern * immer * geben Sie die vollständige Zeichenfolge "" an. Durch die Verwendung von Standardeinstellungen erhalten Sie anbieterspezifisches Verhalten, das von Natur aus nicht portabel ist. Es war ein Irrglaube der Java-Kryptographie-Entwickler, sogar solches Verhalten zuzulassen, und sich darauf zu verlassen, ist ein Java-Krypto-Anti-Pattern. –
Ja, Sie haben Recht. Aber wenn Sie bemerken, gibt es verschiedene Muster, die von Android akzeptiert werden, aber nicht von Java unterstützt werden und umgekehrt. Also, welches sollte das geeignete Muster sein, das an beiden Enden akzeptabel ist? – sbs
Für jede einigermaßen moderne Plattform "RSA/ECB/OAEPWithSHA-256AndMGF1Padding". Für alte Plattformen, die OAEP nicht unterstützen können, ist "RSA/ECB/PKCS1Padding" –