2017-02-10 84 views
0

我想用RSA加密一個任意的文本,但是在我讀的時候,RSA不允許長文本,所以首先,我需要用AES-256加密(例如),然後使用RSA public加密AES密鑰,添加加密文本(使用AES)併發送消息。AES加密解密工作不正常 - 安卓

此刻,我正在做AES enc-dec。但我做錯了什麼,因爲沒有正確解密消息:

首先我產生AES密鑰:

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.ENCRYPT_MODE, secretKey_AES); 
byte[] encrypted = cipher.doFinal(message.getBytes("UTF-8")); 
String encryptedMessage = Base64.encodeToString(encrypted, Base64.DEFAULT); 
return encryptedMessage; 

最後我解密它:

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」);'使用缺省值是便攜的常見原因問題。始終提供完整的「alg/mode/padding」規範。 –

+0

謝謝,我會在星期一改變;) – Shudy

回答

2

您的代碼工作正常,但要在編碼的結果BASE64。 ("Elias"是在base64中的"RWxpYXM")。只要改變

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

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

注意,此方法只適用於文本字符串工作

+0

工作完美。我誤解了Base64 ^^是如何工作的。感謝所有 – Shudy