Eclipse : 关于Android AES加密解密的关键
Eclipse : key on Android AES encryption and decryption
我就是想问一下
我在 Eclipse 上为 android 使用 AES 加密的 SMS 应用程序,但我遇到了问题。
问题是当我将密钥设置为少于 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 参数将以相同的密钥结束。
有关详细信息,请阅读例如此博客 post:Using Password-based Encryption on Android。
我就是想问一下
我在 Eclipse 上为 android 使用 AES 加密的 SMS 应用程序,但我遇到了问题。
问题是当我将密钥设置为少于 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 参数将以相同的密钥结束。
有关详细信息,请阅读例如此博客 post:Using Password-based Encryption on Android。