当前位置: 代码迷 >> J2EE >> Java AES加密有关问题
  详细解决方案

Java AES加密有关问题

热度:38   发布时间:2016-04-22 03:03:32.0
Java AES加密问题
使用KeyGenerator做AES加密解密,有两个问题:
1、kgen.init(128, new SecureRandom(okey)); 这句代码是使用128位密钥加密,也就是okey必须是128位字节,但我的okey长度不是128位(大于、小于都可以),为什么也能通过,得出密文,用该密文解密也没问题?

2、我看说AES支持128位、192位、256位加密,但使用kgen.init(192,xxx), kgen.init(256, xxx)就报Illegal key size or default parameters异常。为什么?

API说明不太明白。谢谢各位赐教。。。。


下面是加密的源代码
Java code
    /**     * 数据加密     *      * @param name     *               算法名称     * @param password     *               密钥     * @param message     *               明文     * @return 返回密文     */    public static byte[] Encode(String name, String password, byte[] message) {        if (name == null || name.length() <= 0                || password == null || password.length() <= 0                || message == null || message.length <= 0)            return null;                if (!name.equals(ALGO_AES))            return null;                byte[] content = null;                KeyGenerator kgen = null;                try {            kgen = KeyGenerator.getInstance(name);            byte[] okey = password.getBytes();            kgen.init(128, new SecureRandom(okey));            SecretKey secretKey = kgen.generateKey();                        Cipher cipher = Cipher.getInstance(name);    // 创建密码器             cipher.init(Cipher.ENCRYPT_MODE, secretKey);// 初始化            content = cipher.doFinal(message);        } catch (NoSuchAlgorithmException e) {            e.printStackTrace();        } catch (NoSuchPaddingException e) {            e.printStackTrace();        } catch (InvalidKeyException e) {            e.printStackTrace();        } catch (IllegalBlockSizeException e) {            e.printStackTrace();        } catch (BadPaddingException e) {            e.printStackTrace();        }        return content;    }


------解决方案--------------------
1、kgen.init(128, new SecureRandom(okey)); 这句代码是使用128位密钥加密,也就是okey必须是128位字节,但我的okey长度不是128位(大于、小于都可以),为什么也能通过,得出密文,用该密文解密也没问题?

128位指的是kgen生成的密钥长度,不是你的okey的长度

2、我看说AES支持128位、192位、256位加密,但使用kgen.init(192,xxx), kgen.init(256, xxx)就报Illegal key size or default parameters异常。为什么?

AES算法支持多种密钥长度,但是不同的生产商实现的AES是不同的
  相关解决方案