2025年AES算法的CBC和ECB两种工作模式

AES算法的CBC和ECB两种工作模式AES 加密算法是一种传统的对称加密算法 即用一个密钥进行加密和解密 其比较常见的工作模式有 ECB 和 CBC 注意 AES 的密钥长度为 128 192 256 位 填充模式有 NoPadding PKCS5Padding PKCS7Padding 等 一 ECB 模式

大家好,我是讯享网,很高兴认识大家。

AES加密算法是一种传统的对称加密算法(即用一个密钥进行加密和解密),其比较常见的工作模式有ECB和CBC。

注意:AES的密钥长度为128/192/256位。

填充模式有:NoPadding/PKCS5Padding/PKCS7Padding/.....等

一、ECB模式 

ECB模式是最简单的AES加密模式,它需要一个固定长度的密钥,固定的明文会生成固定的密文。

ECB模式下AES加密的步骤:

(1)加密

  1. 根据算法名称/工作模式/填充模式获取Cipher实例
    // 创建密码对象,需要传入算法/工作模式/填充模式 Cipher ci=Cipher.getInstance("AES/ECB/PKCS5Padding");

    讯享网

     2.根据算法名称初始化一个SecretKey实例,密钥必须是指定长度 

讯享网byte[] key = "abcdef".getBytes();//手动设置一个16位的密钥
// 根据key的字节内容,"恢复"秘钥对象 SecretKey keySec=new SecretKeySpec(key, "AES");

        3.使用SerectKey初始化Cipher实例,并设置加密或解密模式

讯享网// 初始化秘钥:设置加密模式ENCRYPT_ ci.init(Cipher.ENCRYPT_MODE, keySec);

        4.传入明文或密文,获得密文或明文

// 根据原始内容(字节),进行加密 return ci.doFinal(input);

例如我们给“天生我材必有用,千金散尽还复来。”加密:


讯享网

  

 

 这样就可以得到加密的密文了

(2)解密

解密的前两步都与加密相同,因为AES是对称加密算法,所以加密的时候用的什么算法、工作模式、填充模式,解密的时候也得用什么算法、工作模式及填充模式。

我们对上面加密的内容解密即前两步就为:

讯享网// 创建密码对象,需要传入算法/工作模式/填充模式 Cipher cipher=Cipher.getInstance("AES/ECB/PKCS5Padding"); // 根据key的字节内容,"恢复"秘钥对象 SecretKey keySec=new SecretKeySpec(key, "AES");

3、解密时要用解密模式

// 初始化秘钥:设置解密模式DECRYPT_MODE cipher.init(Cipher.DECRYPT_MODE, keySec);

4.

讯享网// 根据原始内容(字节),进行解密 return cipher.doFinal(input);

 结果就为:

 二、CBC模式

ECB模式的安全性较低,更好的方式就是通过CBC模式进行加密,它需要一个随机数作为IV参数,这样对于同一份明文,每次生成的密文都不同。

(1)加密

在CBC模式下进行AES加密的步骤为

1、

 // 设置算法/工作模式CBC/填充 Cipher ci=Cipher.getInstance("AES/CBC/PKCS5Padding");

 2、

讯享网// 恢复秘钥对象 SecretKey keySpec=new SecretKeySpec(key, "AES");

3、CBC模式下,需要一个随机生成的16字节IV参数,必须使用SecureRandom生成

// CBC模式需要生成一个16 bytes的initialization vector: SecureRandom sr=SecureRandom.getInstanceStrong(); byte[] iv=sr.generateSeed(16); System.out.println("iv字节数组(内容)"+Arrays.toString(iv)); System.out.println("iv字节数组(长度"+iv.length); IvParameterSpec ivps=new IvParameterSpec(iv);

4、因为CBC模式下多了一个IvParameterSpec实例,因此,初始化方法需要调用Cipher的一个重载方法,并传入IvParameterSpec

讯享网// 初始化秘钥:操作模式、秘钥、IV参数 ci.init(ci.ENCRYPT_MODE, keySpec,ivps); // 加密 byte[] data=ci.doFinal(input); // IV不需要保密,把IV和密文一起返回: return join(iv,data);

例如我们给“花须堪折直须折,莫待无花空折枝。”加密:

加密后的结果为:

(2)解密 

CBC模式下的解密步骤为:

1.先把input分割成IV和密文:

byte[] iv=new byte[16]; byte[] data=new byte[input.length-16]; System.arraycopy(input, 0, iv, 0, 16); System.arraycopy(input, 16, data, 0, data.length);

2、开始进行解密操作

讯享网 Cipher ci=Cipher.getInstance("AES/CBC/PKCS5Padding"); SecretKeySpec keySpec=new SecretKeySpec(key, "AES"); IvParameterSpec ivps=new IvParameterSpec(iv);

3.初始化秘钥:操作模式、秘钥、IV参数

ci.init(Cipher.DECRYPT_MODE, keySpec,ivps); // 解密操作 return ci.doFinal(data);

我们对上述加密的内容解密为:

 

 ECB和CBC两种模式下的主要区别为:CBC模式下有随机数作为IV参数,更加安全

小讯
上一篇 2025-03-10 09:56
下一篇 2025-03-25 17:01

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/38654.html