Eclipse:Android上的AES加密和解密密钥
问题描述:
我只想问一下。Eclipse:Android上的AES加密和解密密钥
我在eclipse上有android的AES加密短信应用程序,但我有一个问题。
问题是,当我把关键字少于16个字符,消息不能被加密。但如果密钥是16个字符,则可以加密该消息。
我想插入密钥,无论金额多少。密钥可以生成为16个字符,以获得128位。那么,代码应该如何解决这个问题呢?
在此先感谢 - 我希望你能帮助我。
public class AES {
public static String encrypt(String message, String key){
try {
SecretKeySpec KS = new SecretKeySpec(key.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, KS);
byte[] encrypted = cipher.doFinal(message.getBytes());
return Base64.encodeToString(encrypted, Base64.NO_PADDING);
} catch (Exception e) {
return "ERROR:"+e.getMessage();
}
}
public static String decrypt(String chiperText, String key){
try {
SecretKeySpec KS = new SecretKeySpec(key.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, KS);
byte[] decrypted = cipher.doFinal(Base64.decode(chiperText, Base64.NO_PADDING));
return new String(decrypted);
} catch (Exception e) {
return "ERROR";
}
}
答
您的代码不安全,因为您通过password.getBytes()
直接使用密码作为密钥。
永远不要做这个!
使用像PBKDF2一样的基于密码生成密钥的适当密钥导出函数。相同的密码和相同的PBKDF2参数将以相同的密钥结束。
欲了解更多详情,请阅读例如本博文:Using Password-based Encryption on Android。
我解决了我的关键代码问题。 我尝试在没有Google API的情况下在AVD上运行应用程序,所有功能都运行良好。 但是,如果我使用Google API在AVD上运行应用程序或在Android手机上安装。加密文本无法正确解密。 如何解决这个问题? –
GoogleAPI对AES加密/解密没有影响。可能是使用的Android版本对您没有发布的代码派对有影响。下一次你应该发布一个完整的工作示例,包括样本加密/解密数据和密钥。 – Robert
谢谢你的答案。 仅在兼容性方面存在问题。 :d –