Ich arbeite an einer Android-Anwendung, wo ich möchte, dass der Benutzer Nachrichten mit anderen öffentlichen Schlüsseln verschlüsseln kann. Das System würde ein öffentliches/privates Schlüsselpaar erzeugen und dann können Nachrichten heimlich an andere Benutzer gesendet werden.Android RSA-Verschlüsselung von öffentlichen String
Ich erstelle eine Verschlüsselungsklasse, die für die Verschlüsselung/Entschlüsselung von Nachrichten zuständig ist. Leider habe ich ein paar Probleme.
Bei dieser Methode möchte ich sowohl den geheimen (privaten Schlüssel) des Benutzers als auch die Nachricht, die sie verschlüsseln möchten, 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 soll ich hier fehlt? Fehle ich etwas Offensichtliches oder missverstehe ich, wie diese Werkzeuge funktionieren? Ich habe this Javascript-Bibliothek für die Verschlüsselung des öffentlichen/privaten Schlüssels verwendet und versuche, etwas ähnliches hier zu tun. Ich würde es schätzen, wenn jemand mir in die richtige Richtung zeigen könnte :)
Sie sind also nicht geheim, weil jeder den öffentlichen Schlüssel kennt? Ihr Fehler: Sie möchten keinen Schlüssel generieren, der auf X509-codierten Daten basiert, sondern auf einem Passwort basieren: http://stackoverflow.com/a/992413/995891 – zapl
Ah, ich habe Dinge beim Tippen gemischt . Der Benutzer sollte eine Nachricht unter Verwendung des öffentlichen Schlüssels ihres Ziels verschlüsseln (z. B. wenn ich eine Nachricht an meinen Freund senden möchte, verschlüssele ich mit diesem öffentlichen Schlüssel für Freunde). Ich werde einen Blick auf den Link werfen, den du gepostet hast :) – Pancake
Vielleicht ist es nur ein Tippfehler aber der öffentliche Schlüssel ist jedem bekannt, du kannst * en * kryptieren Daten damit, die nur der Empfänger (= Besitzer des privaten Schlüssels) kann * de * krypten. So ist es sicher, Nachrichten zu senden. editieren: ja. – zapl