对称加密加密算法 -- AES

Posted by 你看那朵乌云儿 on September 10, 2018

对称加密

对称密钥加密(英语:Symmetric-key algorithm)又称为对称加密、私钥加密、共享密钥加密,是密码学中的一类加密算法。这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥。事实上,这组密钥成为在两个或多个成员间的共同秘密,以便维持专属的通信联系。
与公开密钥加密(即非对称加密)相比,要求双方获取相同的密钥是对称密钥加密的主要缺点之一。

常见的对称加密算法有 DES、3DES、AES、Blowfish、IDEA、RC5、RC6。

对称加密的速度比公钥加密快很多,在很多场合都需要对称加密。

AES

简介

高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。

密钥是AES算法实现加密和解密的根本。对称加密算法之所以对称,是因为这类算法对明文的加密和解密需要使用同一个密钥。
AES支持三种长度的密钥:
128位,192位,256位
平时大家所说的AES128,AES192,AES256,实际上就是指的AES算法对不同长度密钥的使用。从安全性来看,AES256 安全性最高,AES128性能最好。

算法

分块

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

填充

假如一段明文长度是192bit,如果按每128bit一个明文块来拆分的话,第二个明文块只有64bit,不足128bit。这时候怎么办呢?就需要对明文块进行填充(Padding)。 加密和解密需要使用同样的填充算法。

  • NoPadding: 不做任何填充,但是要求明文必须是16字节的整数倍。

  • PKCS5Padding(默认): 如果明文块少于16个字节(128bit),在明文块末尾补足相应数量的字符,且每个字节的值等于缺少的字符数。 比如明文:{1,2,3,4,5,a,b,c,d,e},缺少6个字节,则补全为{1,2,3,4,5,a,b,c,d,e,6,6,6,6,6,6}
  • ISO10126Padding: 如果明文块少于16个字节(128bit),在明文块末尾补足相应数量的字节,最后一个字符值等于缺少的字符数,其他字符填充随机数。 比如明文:{1,2,3,4,5,a,b,c,d,e},缺少6个字节,则可能补全为{1,2,3,4,5,a,b,c,d,e,5,c,3,G,$,6}

模式

AES的工作模式,体现在把明文块加密成密文块的处理过程中。
加密和解密需要使用同样的模式。 模式之间的主题思想是近似的,在处理细节上有一些差别。这里只介绍各个模式的基本定义。
AES加密算法提供了五种不同的工作模式:

  • ECB(默认)电码本模式 Electronic Codebook Book
  • CBC 密码分组链接模式 Cipher Block Chaining
  • CTR 计算器模式 Counter
  • CFB 密码反馈模式 Cipher FeedBack
  • OFB 输出反馈模式 Output FeedBack

上面只介绍到了 AES 算法的皮毛, 并没有深入到算法的核心。
知乎上看到一篇文章写得很好。漫画解读:什么是AES算法