des两种加密方式讲解和测试

来源:互联网 发布:一品威客网 知乎 编辑:程序博客网 时间:2024/06/05 02:32
des两种加密方式讲解:
电子密码本模式ECB:
最古老,最简单的模式,将加密的数据分成若干组,每组的大小跟加密密钥长度相同;
然后每组都用相同的密钥加密, 比如DES算法, 如果最后一个分组长度不够64位,要补齐64位;
定义:
          Enc(X,Y)是加密函数
          Dec(X,Y)是解密函数
          Key是加密密钥;
          Pi ( i = 0,1…n)是明文块,大小为64bit;
          Ci ( i = 0,1…n)是密文块,大小为64bit;
ECB加密算法可表示为:
           Ci = Enc(Key, Pi)
ECB解密算法可以表示为:
          Pi = Dec(Key,Ci)
     算法 特点:
每次Key、明文、密文的长度都必须是64位;
数据块重复排序不需要检测;
相同的明文块(使用相同的密钥)产生相同的密文块,容易遭受字典攻击;
一个错误仅仅会对一个密文块产生影响;
加密块链模式CBC:
     与ECB模式最大的不同是加入了初始向量
     定义:
           Enc(X,Y)是加密函数
           Dec(X,Y)是解密函数
           Key是加密密钥;
           Pi ( i = 0,1…n)是明文块,大小为64bit;
           Ci ( i = 0,1…n)是密文块,大小为64bit;
           XOR(X,Y)是异或运算;
           IV是初始向量(一般为64位);
    ECB加密算法可表示为:
          C0 = Enc(Key, XOR(IV, P0)
            Ci = Enc(Key, XOR(Ci-1, Pi)
    ECB解密算法可以表示为:
           P0 = XOR(IV, Dec(Key, C0))
            Pi = XOR(Ci-1, Dec(Key,Ci))
算法特点:
每次加密的密文长度为64位(8个字节);
当相同的明文使用相同的密钥和初始向量的时候CBC模式总是产生相同的密文;
密文块要依赖以前的操作结果,所以,密文块不能进行重新排列;
可以使用不同的初始化向量来避免相同的明文产生相同的密文,一定程度上抵抗字典攻击;
一个错误发生以后,当前和以后的密文都会被影响;






DES加密分为CBC和ECB两种,两种的区别在于init是用的api一样


首先DES加密步骤:
1,bulidkey 创建一个秘钥对象
2,setkey 获取秘钥值
3,getInstance 创建一个Cipher对象
4,init 选择加密还是解密
5,dofinal 对数据进行加密


具体API分析在写完电子钱包之后开始总结


下面是ECB加密的结果测试分析


秘钥为:00 00 00 00 08 00 00 00(是可能是8个字节)但是2DES是(16个字节)(3des是24个字节)
明文为:00 00 00 00 00 00 00 00 (为8个字节的倍数)


密文测试结果:


cbc选择不过模式下密文的结果:
ALG_DES_CBC_ISO9797_M1:
49 24 2A 11 02 F6 06 80 90 00  
ALG_DES_CBC_ISO9797_M2:
49 24 2A 11 02 F6 06 80 AE 88 97 94 8E 53 58 29 90 00
ALG_DES_CBC_NOPAD:
49 24 2A 11 02 F6 06 80 90 00
ALG_DES_CBC_PKCS5:
49 24 2A 11 02 F6 06 80 90 00




填充方式:


ISO9797_M1:
明文不够8个字节会在后面填充0;
ISO9797_M2:
明文不够8个字节会在后面填充一位1;
NOPAD:
不填充;
PKCS5:






ecb选择不过模式下密文的结果:
ALG_DES_EBC_ISO9797_M1:
81 81 B6 5B AB F4 A9 75 90 00   
ALG_DES_EBC_ISO9797_M2:
81 81 B6 5B AB F4 A9 75 9A 6E FF A2 A3 2D C8 A6 90 00   
ALG_DES_EBC_NOPAD:
81 81 B6 5B AB F4 A9 75 90 00 
ALG_DES_EBC_PKCS5:
比较复杂
0 0
原创粉丝点击