2017-02-10 19 views
0

RSAで任意のテキストを暗号化したいのですが、RSAでは長いテキストを許可しないので、まずAES-256で暗号化する必要があります)、次にAESキーをRSA publicで暗号化し、暗号化されたテキスト(AES付き)を追加してメッセージを送信します。AES暗号化復号化が正しく機能していません--Android

この時点で、私はAES enc-decをやっています。

まず、私はAES鍵生成:メッセージを正しく復号化されていないので、しかし、私は何か間違ったことをやっている

Cipher cipher = Cipher.getInstance("AES"); 
cipher.init(Cipher.ENCRYPT_MODE, secretKey_AES); 
byte[] encrypted = cipher.doFinal(message.getBytes("UTF-8")); 
String encryptedMessage = Base64.encodeToString(encrypted, Base64.DEFAULT); 
return encryptedMessage; 

、最終的には私が解読:

KeyGenerator keyGenerator = KeyGenerator.getInstance("AES"); 
keyGenerator.init(KEY_SIZE_AES); 
this.secretKey_AES = keyGenerator.generateKey(); 
return this.secretKey_AES; 

は、私がメッセージを暗号化しますそれ:

Cipher cipher = Cipher.getInstance("AES"); 
cipher.init(Cipher.DECRYPT_MODE, secretKey_AES); 
byte[] decrypted = cipher.doFinal(Base64.decode(message,Base64.DEFAULT)); 
String decryptedMessage = new String(Base64.encode(decrypted, Base64.DEFAULT)); 
return decryptedMessage; 

ただし、復号化されたテキストは元のものと同じではありません。私は何かが欠けている? または私はいくつかのステップを忘れていますか?

例:

enter image description here

+0

' Cipher.getInstance(「AES」)のために動作することを注意して

String decryptedMessage = new String(Base64.encode(decrypted, Base64.DEFAULT)); 

を変更問題。常に "alg/mode/padding"仕様を完全に提供してください。 –

+0

ありがとう、私は月曜日に変更します;) – Shudy

答えて

2

あなたのコードが正しく動作していますが、BASE64で結果をコードしています。 ("Elias"は、ベース64の中で"RWxpYXM"である)。 `移植の共通のソースであるデフォルト値を使用しています。ただ、

String decryptedMessage = new String(decrypted, "UTF-8"); 

この方法は、テキスト文字列のみ

+0

完璧な作業。私はBase64 ^^がどのように働いたのか勘違いしました。全てに感謝 – Shudy

関連する問題