蜗牛大师

吴庆龙的学习笔记

导航

AES简介

一、介绍

AES(Advanced Encryption Standard)是美国联邦政府采用的一种区块加密标准,用来代替 DES 的。它属于对称加密。
AES支持三种密钥长度:128bit、192bit和256bit。
AES的区块长度固定为 128bit!
 
它具有五种加密模式,分别是:
  1. ECB:电码本模式(Electronic Codebook Book)
  2. CBC:密码分组连接模式(Cipher Block Chaing)
  3. CTR:计算机模式(Counter)
  4. CFB:密码反馈模式(Cipher Feedback)
  5. OFB:输出反馈模式(Output Feedback)
更多模式看官方文档:https://docs.oracle.com/en/java/javase/11/docs/specs/security/standard-names.html#cipher-algorithm-modes
 
Java11对这五种加密模式都支持,并且默认的是 ECB 模式。

二、加密过程简介

1、AES的分组加密

AES算法在对明文加密的时候,并不是把整个明文一股脑的加密成一整段密文,而是把明文拆分成一个个独立的明文块,每一个明文块长度128bit。
这些明文块经过AES加密器复杂处理,生成一个个独立的密文块,这些密文块拼接在一起,就是最终的AES加密的结果。

2、填充方式

假如一段明文长度是196bit,如果按每128bit一个明文块来拆分的话,第二个明文块只有64bit,不足128bit。这时候怎么办呢?就需要对明文块进行填充(Padding)。
 
几种典型的填充方式:
  1. NoPadding:不做任何填充,但是要求明文必须是16字节(128bit)的整数倍。
  2. ZeroPadding
  3. PKCS5Padding
  4. PKCS7Padding
 
Java11支持的填充方式:
  1. NoPadding
  2. PKCS1Padding
  3. PKCS5Padding
  4. ISO10126Padding
  5. OAEPPadding, OAEPWith<digest>And<mgf>Padding
  6. SSL3Padding
官方文档:https://docs.oracle.com/en/java/javase/11/docs/specs/security/standard-names.html#cipher-algorithm-paddings
 
Java11默认的是 PKCS5Padding 填充方式。

三、总结

Java11中如果使用 AES 进行加密的话,默认使用的是 AES/ECB/PKCS5PADDING。
 
注意:加密模式和填充方式只是在加密的时候使用,与 AES 的密钥生成没有关系!!!
 

posted on 2021-02-04 15:36  蜗牛大师  阅读(1363)  评论(0编辑  收藏  举报