私は、ユーザーが他の公開鍵を使用してメッセージを暗号化できるようにしたいAndroidアプリケーションに取り組んでいます。システムは公開鍵/秘密鍵ペアを生成し、メッセージを他のユーザに密かに送ることができます。公開ストリングからのAndroid RSA暗号化
私は、メッセージの暗号化/復号化を処理する暗号化クラスを作成しています。残念ながら私はいくつか問題があります。
この方法では、ユーザーの秘密(秘密キー)と暗号化したいメッセージを渡したいと思います。私は秘密をユーザ定義(例えば "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();
}
}
例外は次のとおりです。
java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0c0740b0:ASN.1 encoding routines:ASN1_get_object:TOO_LONG
は、私はここで何をしないのですか?明らかに何かを見逃しているのですか、あるいは私はこれらのツールの仕組みを誤解していますか?私はthisの公開鍵/秘密鍵の暗号化のためにjavascriptライブラリを使用しています。ここで同様のことをしようとしています。誰かが正しい方向で私を指すことができれば感謝します:)
"他のユーザーのメッセージが自分の公開鍵を使って復号化することができます。"誰もが公開鍵を知っているので、彼らは秘密ではありませんか?あなたのエラー:X509でエンコードされたデータに基づいてキーを生成したくない場合は、パスワードに基づいてキーを生成したい:http://stackoverflow.com/a/992413/995891 – zapl
。ユーザーは、ターゲットの公開鍵を使用してメッセージを暗号化する必要があります(たとえば、友人にメッセージを送信する場合は、その公開鍵を使用して暗号化します)。あなたが投稿したリンクを見てみましょう:) – Pancake
多分、それはちょうどタイプミスですが、公開鍵は誰でも知っている、あなたは*受信者(=秘密鍵の所有者) can * de * crypt。メッセージを送信するのが安全な方法です。編集:うん。 – zapl