[英]Eclipse : key on Android AES encryption and decryption
我只想问。
我在eclipse上具有用于AES的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参数将以相同的密钥结尾。
有关更多详细信息,请阅读以下博客文章: 在Android上使用基于密码的加密 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.