1 对称加密
1.1 DES加密算法
DES算法的入口参数有三个:Key、Data、Mode。
其中Key为8个字节共64位,是DES算法的工作密钥;
Data也为8个字节64位,是要被加密或被解密的数据;
Mode为DES的工作方式,有两种:加密或解密。
1.2 3DES加密算法
3DES是DES加密算法的一种模式,它使用3条64位的密钥对数据进行三次加密。
3DES(即Triple DES)是DES向AES过渡的加密算法,是DES的一个更安全的变形。它以DES为基本模块,通过组合分组方法设计出分组加密算法。
1.3 RC4算法
RC4于1987年提出,和DES算法一样,是一种对称加密算法,也就是说使用的密钥为单钥(或称为私钥)。但不同于DES的是,RC4不是对明文进行分组处理,而是字节流的方式依次加密明文中的每一个字节,解密的时候也是依次对密文中的每一个字节进行解密。密钥长度可变。
1.3.1 S和T数组初始化
i=0-255 -> S[i]=i / T[i] = key(i%key_len)
1.3.2. 数据表S的初始变换
i=0-255 -> j=j+S[i]+T[i] -> swap( S[i],S[j] )
1.3.3 密钥流生成
i=0-255 -> j=j+S[i] -> swap( S[i],S[j] ) -> s[i]+s[j]
1.4 AES(Advanced Encryption Standard)加密算法
AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高。
AES算法基于排列和置换运算。排列是对数据重新进行安排,置换是将一个数据单元替换为另一个。
AES使用几种不同的方法来执行排列和置换运算。AES是一个迭代的、对称密钥分组的密码,它可以使用128、192和256位密钥,并且用128位(16字节)分组加密和解密数据。
与公共密钥加密使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换和替换输入数据。
1.4.1 AES加密算法解析
- 1.电码本模式(Electronic Codebook Book (ECB))
- 2.密码分组链接模式(Cipher Block Chaining (CBC))
- 3.计算器模式(Counter (CTR))
- 4.密码反馈模式(Cipher FeedBack (CFB))
- 5.输出反馈模式(Output FeedBack (OFB))
1.4.1.1 电码本模式(Electronic Codebook Book (ECB)
这种模式是将整个明文分成若干段相同的小段,然后对每一小段进行加密,在综合为加密密文。
128bit加密过程
1. 分组-填充
将明文分成每128bit为一组,最后一组不足128bit就需要对其填充。填充方式很多种,比如PKCS7Padding,当明文块少于16个字节,则在明文块末尾补足相应数量的字符,并且每个字节都等于缺少的字符数。
比如:
1,2,3,4,5,6,7,8,9
这里有9个字节,不足16个字节,差7个字节,所以就补7个7变为
1,2,3,4,5,6,7,8,9,7,7,7,7,7,7,7
2. 密钥-子密钥-初始向量iv
初始向量iv:实际上它并不是 Key,可以把它理解成我们使用 md5 时的 salt,通过对不同的数据使用不同的 salt,可以避免遭遇彩虹表撞库之类的暴力破解,iv 的作用亦如此,重要的是保证其随机性。IV 的作用是在每次加密消息时向过程中插入一些“新”随机性。这样,相同的消息每次都会加密为不同的密文,而相似的消息不会产生相似的密文。这就是为什么 IV 通常需要是随机的,但从不需要保密的原因。IV的长度为16字节。超过或者不足,可能实现的库都会进行补齐或截断。但是由于块的长度是16字节,所以一般可以认为需要的IV是16字节。
密钥:分为128bit,192和256bit密钥
子密钥:AES不直接使用原始密钥,而是对其进行一些处理。
3. 轮加密
① S盒字节代换
128bits对应16个字节,即图中A0-A15,每个Ai是8bits
S盒如下:
② ShiftRows
行1不移动,行2移动一次,行3移动两次,行四移动3次。
③ MixColumn
④ 密钥加法
最后,密钥加法层非常简单,输入的 是16字节(128 bits),经过密钥编排之后产生的每一个子密钥 也是16字节(128 bits),将 与对应此轮的子密钥 做按位异或运算(XOR,即流程图中的 符号)即可。
4. 子密钥
原始密钥 K0-K15共16字节(128bits),将其4个分成一组,分别记为W0-W3,每组32bits,然后进行10轮循环处理,生成44个Wi。
对于10轮,i=1,2….10
函数 g存在的目的是增加密钥编排中的非线性,且消除AES结构中的对称性。其中函数g和轮系数RC[i]为
轮系数RC:
生成44个Wi,每4个为一组,组成一个子密钥Ki,共生成11个子密钥K0-K10用于加密。
1.4.1.2 密码分组链接模式(Cipher Block Chaining (CBC))
这种模式是先将明文切分成若干小段,然后每一小段与初始块或者上一段的密文段进行异或运算后,再与密钥进行加密。
1.4.1.3 计算器模式(Counter (CTR))
在CTR模式中, 有一个自增的算子,这个算子用密钥加密之后的输出和明文异或的结果得到密文,相当于一次一密。这种加密方式简单快速,安全可靠,而且可以并行加密,但是在计算器不能维持很长的情况下,密钥只能使用一次。
1.4.2 AES加密算法识别
- 加密秘钥是128位(16字节)、192位(24字节)、256位(32位)
2 非对称加密