AES加密算法
什么是AES加密算法?
AES算法全称是Advanced Encryption Standard, 是DES算法的替代者,是当今最流行的对称加密算法之一
什么是对称加密算法?
对称加密:双方使用的同一个密钥,既可以加密又可以解密,这种加密方法称为对称加密,也称为单密钥加密。
优点:速度快,对称性加密通常在消息发送方需要加密大量数据时使用,算法公开、计算量小、加密速度快、加密效率高。
缺点:在数据传送前,发送方和接收方必须商定好秘钥,然后 使双方都能保存好秘钥。其次如果一方的秘钥被泄露,那么加密信息也就不安全了。另外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的唯一秘 钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担。
在对称加密算法中常用的算法有:DES、AES等。
AES:密钥的长度可以为128、192和256位,也就是16个字节、24个字节和32个字节
DES:密钥的长度64位,8个字节。
什么是非对称加密算法?
非对称加密:一对密钥由公钥和私钥组成(可以使用很多对密钥)。私钥解密公钥加密数据,公钥解密私钥加密数据(私钥公钥可以互相加密解密)。
私钥只能由一方保管,不能外泄。公钥可以交给任何请求方。
在非对称加密算法中常用的算法有:
RSA、Elgamal、背包算法、Rabin、Diffie-Hellman、ECC(椭圆曲线加密算法)。
使用最广泛的是RSA算法,Elgamal是另一种常用的非对称加密算法。
缺点:速度较慢
优点:安全
对称加密和MD5,SHA这样的哈希摘要算法有什么不同?
1、对称加密是真正意义上的加密算法, 对称加密算法可逆,主要是保证秘密信息不被泄漏
2、摘要算法是不可逆的,它的主要是对信息一致性和完整性的校验
了解AES加密 密钥、填充、模式的基本概念
1、密钥
密钥是AES算法实现加密和解密的根本。对称加密算法之所以对称,是因为这类算法对明文的加密和解密需要使用同一个密钥。
AES支持三种长度的密钥:128位,192位,256位(AES128,AES192,AES256,实际上就是指的AES算法对不同长度密钥的使用)
从安全性上来看AES256安全性高,从性能上来看AES128性能最高,原因是他们加密处理轮数不同。
2、填充
AES分组特性
AES算法在对明文加密的时候,并不是把整个明文一股脑加密成一整段密文,而是把明文拆分成一个个独立的明文块,每一个铭文块长度128bit。
这些明文块经过AES加密器的复杂处理,生成一个个独立的密文块,这些密文块拼接在一起,就是最终的AES加密结果。
** 如果明文长度不够的话,需要对铭文进行填充 (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}
注意⚠️: 加解密填充方式要一致
3、模式
AES的工作模式,体现在把明文块加密成密文块的处理过程中。AES加密算法提供了五种不同的工作模式:CBC、ECB、CTR、CFB、OFB
CBC模式: 电码本模式 Electronic Codebook Book
ECB模式(默认): 密码分组链接模式 Cipher Block Chaining
CTR模式: 计算器模式 Counter
CFB模式: 密码反馈模式 Cipher FeedBack
OFB模式: 输出反馈模式 Output FeedBack
python例子
def AES_encrypt(text, key, iv):
pad = 16 - len(text) % 16
text = text + pad * chr(pad)
text = text.encode("utf-8")
encryptor = AES.new(key.encode('utf-8'), AES.MODE_CBC, iv)
encrypt_text = encryptor.encrypt(text)
encrypt_text = base64.b64encode(encrypt_text)
return encrypt_text.decode('utf-8')