Crypto-AES对称加密
对称加密AES
加密思路:
根据分组进行填充
待加密的明文以16字节分组进行加密,如果数据字节长度不是16的倍数,最后的一组则需要在有效数据后面进行填充,使得数据长度变为16字节,AES填充方式分为NoPadding、PKCS5(PKCS7)、ISO10126、Zeros。
NoPadding:不填充,那就只能加密长度为16倍数的数据,一般不使用
Zeros:补0,如果原数据长度恰好是16的倍数,也要补16个0
ISO10126:最后一个字节是填充的字节数(包括最后一字节),其他全部填随机数
加密方法:
加密方式分为五种:电码本模式(Electronic Codebook Book (ECB))、密码分组链接模式(Cipher Block Chaining (CBC))、计算器模式(Counter (CTR))、密码反馈模式(Cipher FeedBack (CFB))、输出反馈模式(Output FeedBack (OFB))。实际应用比较多的是ECB和CBC。
- ECB模式(Electronic Code Book Mode)
ECB模式是最早采用和最简单的模式,它将加密的数据分成若干组,每组的大小跟加密密钥长度相同,然后每组都用相同的密钥进行加密。
优点:有利于并行计算;误差不会累计(互不干扰)。
缺点:可能对明文进行主动攻击。
ECB加密过程:
1 | from Crypto.Cipher import AES //aes库 |
ECB解密过程:
1 | from Crypto.Cipher import AES |
- CBC模式(Cipher Block Chaining Mode)
CBC模式对于每个待加密的密码块,在加密前会先与前一个密码块的密文异或然后再用加密器加密(图中的圆圈十字符号表示异或操作,下同)。第一个明文块与一个叫初始化向量的数据块异或。加、解密双方共同知晓密钥和初始化向量才能实现加解密。
优点:安全性比ECB模式高;是SSL的标准。
缺点:数据块之间的加密有依赖关系,因此不能并行计算。
解密思路:若能知道iv,则解密类似于cbc,若iv已知,观察能否通过爆破或其他方式求出iv,若不能,考虑是否存在多次加密且得知某一次的iv 得到了相同的密文, 根据公式:iv2 = iv1 ^ c1 ^ c2 可推出iv2.
- CFB模式(Cipher Feedback Mode)
CFB 模式是用分组算法实现流算法,明文数据不需要按分组大小对齐。
优点:明文数据不需要按分组大小对其,即无需填充。
缺点:同CBC模式,无法并行计算。
- OFB模式(Output Feedback Mode)
OFB 模式的过程和CBC模式有点像,但明文数据不需要按分组大小对齐。
优点:明文数据不需要按分组大小对其,即无需填充。
缺点:同CBC模式,无法并行计算。
- CTR模式(Counter Mode)
CTR模式是在ECB模式的基础上,引入了Nonce随机数和Counter计数器,Nounce随机数和Counter计数器整体可看作计数器,每加密一段明文,计数器向上加一,并且这个计数器都会和初始IV进行连接、加加、异或等运算,然后使用加密器进行加密,最后在和明文异或得到分段密文。
优点:明文数据不需要按分组大小对其,即无需填充。
缺点:加密方和解密方需要同时维护初始IV、Nonce、Counter。