Android RSA-Verschlüsselung aus öffentlichem String
Ich arbeite an einer Android-Anwendung, in der der Benutzer Nachrichten mit den öffentlichen Schlüsseln anderer Benutzer verschlüsseln soll. Das System würde ein öffentliches / privates Schlüsselpaar generieren und dann können Nachrichten heimlich an andere Benutzer gesendet werden.
Ich erstelle eine Verschlüsselungsklasse, die die Verschlüsselung / Entschlüsselung von Nachrichten übernimmt. Leider habe ich einige Probleme.
Bei dieser Methode möchte ich das Geheimnis des Benutzers (den privaten Schlüssel) sowie die Nachricht, die er verschlüsseln möchte, weitergeben. Ich möchte, dass das Geheimnis benutzerdefiniert ist (wie "MySecretPassword").
public static void lock(String secret, String textToEncrypt) {
try {
//Convert the public key string into a key
byte[] encodedPublicKey = Base64.decode(secret.getBytes("utf-8"),Base64.DEFAULT);
X509EncodedKeySpec spec = new X509EncodedKeySpec(encodedPublicKey);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publickey = keyFactory.generatePublic(spec); //Crash Here
PrivateKey privateKey = keyFactory.generatePrivate(spec);
//Encrypt Message
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publickey);
byte[] encryptedBytes = cipher.doFinal(textToEncrypt.getBytes());
Log.d(TAG,"Encrypted: "+new String(encryptedBytes));
} catch (Exception e) {
e.printStackTrace();
}
}
Die Ausnahme ist wie folgt:
java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0c0740b0:ASN.1 encoding routines:ASN1_get_object:TOO_LONG
Was fehle ich hier? Vermisse ich etwas Offensichtliches oder missverstehe ich, wie diese Tools funktionieren? Ich habe @ verwendDie Javascript-Bibliothek für Public / Private Key-Verschlüsselung vor und versuche hier etwas ähnliches zu tun. Ich würde mich freuen, wenn jemand mich in die richtige Richtung lenken könnte:)