繁体   English   中英

Eclipse:Android AES加密和解密的密钥

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM