DES
算法原理
DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位,其算法主要分为两步:
1.初始置换
将输入的64位数据块按位重新组合,并把输出分为Lo,Po两个部分每部分各位32位。置换规规则是将输入的第58位换到第一位,第50位换到第2位……(没8位一换)依此类推,最后一位是原来的第7位。L0、R0则是换位输出后的两部分,L0是输出的左32位,R0是右32位,例:设置换前的输入值为D1D2D3……D64,则经过初始置换后的结果为:L0=D58D50……D8;R0=D57D49……D7。
2.逆置换
经过16次迭代运算后,得到L16、R16,将此作为输入,进行逆置换,逆置换正好是初始置换的逆运算,由此即得到密文输出。
使用
DES算法的入口参数有三个:Key、Data、Mode。
其中Key为8个字节共64位,是DES算法的工作密钥;
Data也为8个字节64位,是要被加密或被解密的数据;
Mode为DES的工作方式,有两种:加密或解密。
3DES
3DES是DES加密算法的一种模式,它使用3条56位的密钥对数据进行三次加密。
它以DES为基本模块,通过组合分组方法设计出分组加密算法。比起最初的DES,3DES更为安全。
该方法使用两个密钥,执行三次DES算法,加密的过程是加密-解密-加密,解密的过程是解密-加密-解密。
3DES加密过程为:C=Ek3(Dk2(Ek1(P)))
3DES解密过程为:P=Dk1(EK2(Dk3(C)))
①两个密钥合起来有效密钥长度有112bit,可以满足商业应用的需要,若采用总长为168bit的三个密钥,会产生不必要的开销。
②加密时采用加密-解密-加密,而不是加密-加密-加密的形式,这样有效的实现了与现有DES系统的向后兼容问题。因为当K1=K2时,三重DES的效果就和原来的DES一样,有助于逐渐推广三重DES。
AES
1.简介
AES使用几种不同的方法来执行排列和置换运算。AES是一个迭代的、对称密钥分组的密码,它可以使用128、192和256位密钥,并且用128位(16字节)分组加密和解密数据。
AES作为新一代的数据加密标准汇聚了强安全性、高性能、高效率、易用和灵活等优点。相对而言,AES的128密钥比DES的56密钥强1021倍[。AES算法主要包括三个方面:轮变化、圈数和密钥扩展。
2.密钥
密钥是AES算法实现加密和解密的根本。对称加密算法之所以对称,是因为这类算法对明文的加密和解密需要使用同一个密钥。
从安全性性来看,AES256安全性最高,从性能上来看AES128性能最高。本质上因为加密论述不同。
3.填充
AES采用分组加密
AES分组加密.png
AES在对明文加密时,是将明文拆分为一个个独立的铭文块,每个铭文块长度128bt。
这些明文块经过AES加密器的复杂处理,生成一个个独立的密文块,这些密文块拼接在一起,就是最终的AES加密结果。
But!!!
这里涉及到一个问题:
假如一段明文长度是196bit,如果按每128bit一个明文块来拆分的话,第二个明文块只有64bit,不足128bit。这时候怎么办呢?就需要对明文块进行填充(Padding)。
填充方式
1.Nopadding
不做任何填充,但是要求明文必须是16字节的整数倍。
2.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}
3.IS010126Padding
如果明文块少于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}
4.其他
1).Zeros填充:全部填充为0的字节
2). ANSIX923 填充: 填充为0的字节序列,最后一个字节记录填充的总字节.
例: F9 00 00 00 00 00 00 07 //第二块
注意:区别在于PKCS5的规范中只讨论了 (8字节/64位) 块的加密, 而在PKCS7Padding定义中,对于块的大小是不确定的。因此PKCS7可以用于不是64位整数倍的块的填充。并且向下兼容PKCS5Padding。对于AES加密(16字节/128位),这两种填充方式效果相同。
网友评论