AES/ECB/PKCS5Padding8)

    /**
     * AES/ECB/PKCS5Padding (128)
     * AES加密 ECB模式 PKCS5填充方式 密钥长度必须为16个字节(128位)
     */
    public static void main(String[] args) throws Exception {
        //密钥生成器
        KeyGenerator kgen = KeyGenerator.getInstance("AES");
        //设置密钥长度128位
        kgen.init(128, new SecureRandom());
        //生成key
        SecretKey key = kgen.generateKey();

        //长度为16的二进制数组,密钥我们自己生成也可以.
        byte[] keyBytes = key.getEncoded();
        System.out.println("keyBytes长度是16 = " + keyBytes.length);

        //创建AES的密钥
        SecretKeySpec aesKey = new SecretKeySpec(keyBytes, "AES");

        //加密 模式 填充方式
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, aesKey);

        //对abc进行加密,因为明文长度不固定,所以需要先分组在加密,每一组长度16个字节
        //不够16的需要进行填充,abc的长度是3个字节,所以要填充13个字节在进行加密
        //所以encrypt的长度为16,因为在加密之前填充了
        //如果长度正好为16个字节,那么也要新填充一个16长度的组,那么加密后的encrypt的长度为32
        byte[] encrypt = cipher.doFinal("abc".getBytes());
        System.out.println(encrypt.length);

        cipher.init(Cipher.DECRYPT_MODE, aesKey);
        byte[] decrypt = cipher.doFinal(encrypt);
        System.out.println(new String(decrypt));
    }

 

ECB模式作为最简单的工作模式,直接将明文分组,每组分别加密,每个分组独立且前后文无关

AES/ECB/PKCS5Padding8)_第1张图片

 

参考http://xuanzhui.iteye.com/blog/2399859

你可能感兴趣的:(JAVA)