AES加密解密无法正常工作--Android

时间:2017-02-10 08:12:26

标签: java android encryption cryptography

我想用RSA加密任意文本,但正如我所读,RSA不允许长文本,所以第一,我需要用AES-256加密(例如),然后使用RSA public加密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

1 个答案:

答案 0 :(得分:2)

您的代码工作正常,但您将结果编码为BASE64。 ("Elias"在base64中为"RWxpYXM")。只需改变

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

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

请注意,此方法仅适用于文本字符串