系列二:AES加密
一、基本介绍
AES加密是一种对称加密算法,其全称为 :Advanced Encryption Standard,是DES(Data Encryption Standard)加密算法的升级替代版,也是目前最为流行的对称加密算法之一,之所以说是对称加密算法,是因为AES的加密和解密都是使用同一个秘钥完成。
二、AES的三个核心要素
AES加密算法的实现,需要秘钥、填充与模式这三者的配合使用,三者的概念如下:
2.1、秘钥
秘钥是实现AES加密与解密的根本,AES支持三种长度的密钥: 128位, 192位, 256位
,其中AES256安全性最高,而AES128性能最高,因为加密处理的复杂度不同,秘钥越长,加密处理轮数越多。
2.2、填充
之所以需要用到填充,是因为AES加密是分组加密,也就是并不是直接将明文全部统一加密,而是对明文进行分组,拆成一个个独立的明文块(每个明文块长度都是128bit),之后对每个明文块独立加密,形成不同的密文块,最后将这些明文块拼接起来形成最终的加密结果。
由于AES明文块拆分的长度固定为128bit,当一段长度不足128bit,或者超过128bit,但不是其倍数时,我们就没法把明文按128bit长度分成等长的明文块,这时候就需要对明文块进行填充,将其补齐为128bit。
AES填充方式有以下几种:
• NoPadding
• PKCS7Padding
• ZeroPadding
• AnsiX923
• Iso10126
• Iso97971
比较常见的是这四种:NoPadding、PKCS7Padding、ZeroPadding、Iso10126。
- NoPadding是指不做任何填充,但是要求明文块的长度必须是128bit,也就是明文的总长度必须为128位的整数倍。
- PKCS7Padding是当明文块的长度不足16个字节(128bit)时,按照缺少的字节数(假设为n),填充n个字节,并且每个字节的值都等于n。比如明文:{1,2,3,4,5,a,b,c,d,e,f},缺少5个字节,则补全为{1,2,3,4,5,a,b,c,d,e,f,5,5,5,5,5}。
- ZeroPadding顾名思义,是用0来进行填充,虽然填充方式比较简单,但并不是很好用,因为如果明文块最后一位也是0时,解密时就容易出错。
- Iso10126填充与PKCS7相似,同样是按缺少的字节(假设为n)数来填充,但其填充的最后一个字节为n,其余字节填充随机数。
2.3、模式
AES的工作模式体现在把明文块加密成密文块的过程中,AES加密算法提供了五种不同的工作模式:
ECB: 电码本模式(Electronic Codebook Book)
CBC: 密码分组链接模式(Cipher Block Chaining)
CTR: 计算器模式(Counter)
CFB: 密码反馈模式(Cipher FeedBack)
OFB: 输出反馈模式(Output FeedBack)
比较常见的两种模式就是ECB和CBC模式:
ECB模式是最简单的模式,该模式下每个明