快捷搜索:  汽车  科技

aes加密算法可以解密吗:加密算法之AES

aes加密算法可以解密吗:加密算法之AES* 1.构造密钥生成器 * 2.根据ecnodeRules规则初始化密钥生成器 * 3.产生密钥 * 4.创建和初始化密码器 * 5.内容加密 * 6.返回字符串代码示例:加密步骤:至于其他的模式,本文不再过多讲解,有兴趣的可以借助互联网或者书本深入了解。在java的javax.crypto包有很好用的封装哦,不需要额外的jar包支持。java 代码示例:

从图中可以看出,CBC模式在每一个明文块加密前会让明文块和一个值先做异或操作。IV作为初始化变量,参与第一个明文块的异或,后续的每一个明文块和它前一个明文块所加密出的密文块相异或。

这样以来,相同的明文块加密出的密文块显然是不一样的。

CBC模式的好处是什么呢?
安全性更高

坏处也很明显:
1.无法并行计算,性能上不如ECB
2.引入初始化向量IV,增加复杂度

至于其他的模式,本文不再过多讲解,有兴趣的可以借助互联网或者书本深入了解。

开源工具

在java的javax.crypto包有很好用的封装哦,不需要额外的jar包支持。

java 代码示例:

加密步骤:

* 1.构造密钥生成器 * 2.根据ecnodeRules规则初始化密钥生成器 * 3.产生密钥 * 4.创建和初始化密码器 * 5.内容加密 * 6.返回字符串

代码示例:

aes加密算法可以解密吗:加密算法之AES(1)

  • kgen.init传入的第一个参数128决定了密钥的长度是128bit。
  • 除此之外你还可以使用Cipher.getInstance("AES/CBC/NoPadding")指定AES的填充方式和工作模式。
  • 几点补充:

    1.我们在调用封装好的AES算法时,表面上使用的Key并不是真正用于AES加密解密的密钥,而是用于生成真正密钥的“种子”。

    2.填充明文时,如果明文长度原本就是16字节的整数倍,那么除了NoPadding以外,其他的填充方式都会填充一组额外的16字节明文块。

    解密:

    1.同加密1-4步 * 2.将加密后的字符串反纺成byte[]数组 * 3.将加密内容解密

    代码示例:

    aes加密算法可以解密吗:加密算法之AES(2)

    注意:上述代码使用Base64进行了编码和解码,避免个别字符超出ASCII的范围出现乱码现象方便日志或者控制台查看。

    猜您喜欢: