因工作需要接触到了算法。开始一头雾水,经过一段时间挣扎总算是有些眉目,在此写下该文章,希望对首次接触算法的朋友带来点启发。DES算法具体实现在网上每种语言都有例子,这里只用最通俗的语言聊一聊对DES的一些理解,若有不对的地方烦请高手留言指正,以免误导他人。
1.DES与3DES
不要理解为2种算法,其实都是DES算法,区别呢就是加密密钥长度。
DES算法:密钥长度必须为8字节,要加密的数据也得8字节,然后得到8字节的加密结果
3DES:根据密钥长度分为2Key(16字节密钥)和3Key(24字节密钥),同样是加密8字节数据,得到8字节密文。只不过是做了3次DES运算 。3DES_2Key:密钥16字节,前8字节暂叫做k1,后8字节k2,实际操作:用k1做DES加密,加密结果用k2做DES解密,解密结果再用k1做加密,得到最终密文。3DES_3Key:密钥24字节,前8字节暂叫做k1,中间8字节k2,后8字节k3,实际操作:用k1做DES加密,加密结果用k2做DES解密,解密结果再用k3做加密,得到最终密文。
2.加密模式
可以理解为加密数据超过8字节后如何处理。
如果要加密的数据长度超过8字节,比如16字节(但长度依旧是8的整数倍才可以),则有加密模式区分
ECB模式:将数据每8字节一组,平均分配。然后对每一组数据单独加密(加密算法根据实际情况确定,可以是3DES,DES),然后得到8字节密文,最后把所有的密文串联起来得出加密结果
CBC模式:将数据每8字节一组,平均分配。然后在最前面增加一组初始向量0x0000000000000000。前2组数据先异或,然后加密异或结果,得到8字节加密数据。然后将加密数据与后一组数据异或,然后再加密异或结果,,,以此类推,最终将每一次的加密结果串联起来得出加密结果
网上摘录:
与ECB模式最大的不同是加入了初始向量
定义: