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:)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage