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