【问题标题】:AES encryp-decrypt is not working properly --AndroidAES 加密-解密无法正常工作 --Android
【发布时间】:2017-02-10 08:12:25
【问题描述】:

我想用 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;

但是解密出来的文字和原来的不一样。我错过了什么? 还是我忘记了某个步骤?

例子:

【问题讨论】:

  • Cipher.getInstance("AES"); 使用默认值,这是可移植性问题的常见来源。始终提供完整的“alg/mode/padding”规范。
  • 谢谢,我会在星期一换;)

标签: java android encryption cryptography


【解决方案1】:

您的代码工作正常,但您将结果编码为 BASE64。 ("Elias" 在 base64 中是 "RWxpYXM")。换个方式

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

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

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

【讨论】:

  • 工作完美。我误解了 Base64 的工作原理 ^^。谢谢大家
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-07
  • 2016-09-22
  • 1970-01-01
相关资源
最近更新 更多