四、DES和RSA简介

DES是分组加密算法,速度快,使用单一密钥,加密解密都使用同一个密钥,通常用于大量数据加密,目前处于半淘汰状态。
RSA算法是流式加密算法,速度慢,可是使用成对的密钥,加密解密使用不一样的密钥,有利于保密和身份认定,通常用于加密DES类算法的密钥。html

对称加解密算法
通讯双方通讯前共同拟定一个密钥,不对第三方公开。 消息发送前都经过该密钥加密,到达后也经过该密钥解密。 不具备个体原子性,一个密钥被共享,泄露机率加大。 算法

公私钥加解密举例
设若甲有一份需保密的数字商业合同发给乙签署。通过以下步骤: 1. 甲用乙的公钥对合同加密。 2. 密文从甲发送到乙。 3. 乙收到密文,并用本身的私钥对其解密。 4. 解密正确,经阅读,乙用本身的私钥对合同进行签署。 5. 乙用甲的公钥对已经签署的合同进行加密。 6. 乙将密文发给甲。 7. 甲用本身的私钥将已签署合同解密。 8. 解密正确,确认签署。安全

从以上步骤,咱们知道: 1. 用公钥加密的密文能且只能用与其惟一配对的私钥才能解开。 2. 若是某份密文被解开,那么确定是密文的目标信息主体解开的。 3. 私钥因其惟一标识全部者的属性,被用于数字签名,具备法律效力。函数

DES 是一种单一密钥加解密算法。通讯主体之间只有一个密钥,该密钥不对第三方公开。 RSA 则是公钥/私钥系统。该系统比 DES 系统更原子化,具备广泛应用意义。 加密

一、DES 加解密算法spa

DES (Data Encryption Standard),是IBM在上个世纪70年代开发的单密钥对称加解密算法。该算法利用一个56+8奇偶校验位(第8, 16, 24, 32, 40, 48, 56, 64位)=64位的密钥对以64位为单位的块数据进行加解密。3d

有明文M(64位) = 0123456789ABCDEF,即 M(64位) = 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111htm

L(32位) = 0000 0001 0010 0011 0100 0101 0110 0111
R(32位) = 1000 1001 1010 1011 1100 1101 1110 1111blog

有密钥K(64位) = 133457799BBCDFF1,即 K(64位) = 00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001 (奇校验)其中红色标注为奇偶校验位,即实际密钥为56位。ip

第一步:生成16个子钥(48位)

对K使用PC-1(8×7),详见:http://zh.wikipedia.org/wiki/DES%E8%A1%A5%E5%85%85%E6%9D%90%E6%96%99
57 49 41 33 25 17 9  
1 58 50 42 34 26 18
10 2 59 51 43 35 27
19 11 3 60 52 44 36  
63 55 47 39 31 23 15  
7 62 54 46 38 30 22  
14 6 61 53 45 37 29  
21 13 5 28 20 12 4
主要输入的64位数据中只用到了56位,剩余的8位能够用于奇偶校验。

从而,由K(64位) = 00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001
获得K+(56位) = 1111000 0110011 0010101 0101111 0101010 1011001 1001111 0001111,进而
C0(28位) = 1111000 0110011 0010101 0101111
D0(28位) = 0101010 1011001 1001111 0001111
C1和D1分别为C0和D0左移1位。… C3和D3分别为C2和D2左移2位 …

从而获得C1D1 ~ C16D16:
C1 = 1110000110011001010101011111 D1 = 1010101011001100111100011110
C2 = 1100001100110010101010111111 D2 = 0101010110011001111000111101
… …
C16 = 1111000011001100101010101111 D16 = 0101010101100110011110001111

Kn(48位) = PC-2( CnDn(56位) ),该置换从56位的密钥调度状态中取出48位的子密钥。最终获得全部16个子钥,每一个48位:

K1 = 000110 110000 001011 101111 111111 000111 000001 110010 
K2 = 011110 011010 111011 011001 110110 111100 100111 100101 
… …
K16 = 110010 110011 110110 001011 000011 100001 011111 110101

第二步:用子钥对64位数据加密

对明文M使用IP(8×8)
58 50 42 34 26 18 10 2
60 52 44 36 28 20 12 4
62 54 46 38 30 22 14 6
64 56 48 40 32 24 16 8
57 49 41 33 25 17 9 1
59 51 43 35 27 19 11 3
61 53 45 37 29 21 13 5
63 55 47 39 31 23 15 7 

因为M(64位) =0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111,对M运用IP,故有 IP(64位) = 1100 1100 0000 0000 1100 1100 1111 1111 1111 0000 1010 1010 1111 0000 1010 1010

IP(64位) = L0(32位) + R0(32位)故
L0 (32位) = 1100 1100 0000 0000 1100 1100 1111 1111
R0 (32位) = 1111 0000 1010 1010 1111 0000 1010 1010

从L0和R0开始,循环16次,得出L1R1到L16R16,依据递推公式:

Ln = R(n-1)

Rn = L(n-1) + f (R(n-1),Kn)

其中除了Kn为48位,其余变量及函数均为32位。其中+号表示异或XOR运算,函数f 从一个32位的数据块R(n-1)和一个48位子钥Kn获得一个新的32位数据块。
到此为止,咱们获得了16对32位的数据块,即 L1R1, L2R2, L3R3, …, L16R16。最后一对L16R16就是咱们须要的。

继续对R16L16(64位)运用一次重排列: IP-1(8×8)。即在
L16(32位) = 0100 0011 0100 0010 0011 0010 0011 0100
R16(32位) = 0000 1010 0100 1100 1101 1001 1001 0101
R16L16(64位) = 00001010 01001100 11011001 10010101 01000011 01000010 00110010 00110100时,对R16L16运用IP-1,得 IP-1(64位) = 10000101 11101000 00010011 01010100 00001111 00001010 10110100 00000101 = 85E813540F0AB405

从而,通过以上步骤,最终从明文 M = 0123456789ABCDEF 获得密文 C = IP-1 = 85E813540F0AB405,以上为加密过程,要解密,依次反向计算便可。

多层 DES

DES 算法多是运用最广的对称加解密算法,但因为密钥长度较短,致使安全性不高。故在安全性占首要地位的应用场合如金融业等,采用多个不一样密钥(K1, K2, K3)的多层DES加解密。这些多层DES系统被普遍应用,由此衍生出Triple DES, G-DES, DES-X, LOKI89和ICE等对称加解密系统。

二、RSA 加解密算法

与DES不一样,RSA算法中,每一个通讯主体都有两个钥匙,一个公钥一个私钥。通常应用过程为:

clipboard

RSA 具体算法:公私钥生成

1)随机选定两个大素数p、q,计算公钥和私钥的公共模数 n = pq
2)计算模数n的欧拉函数 φ(n) ,这里φ(n)=(p-1)(q-1)
3)选定一个正整数e , 使1 < e < φ(n) , 且e与φ(n)互质。
4)计算d, 知足 de ≡ 1(mod φ(n))。de被n除的余数为1,或者说de减去1,能够被n整除。

n与e决定公钥, n与d决定私钥。在已知n和e的状况下,因为n很是大求解φ(n)是不可行的,这样别保证了d的安全性。

RSA 具体算法:加解密
该过程为小张给小李发消息,公钥为小李的公钥(n ,e), 私钥为小李的私钥(n ,d).
小张欲给小李发一个消息M, 他先把M转换为一个大数m < n, 而后用小李的公钥(n ,e)把m加密为另外一个大数: c = me mod n
小李收到小张发来的大数c, 着手解密. 经过本身的私钥(n ,d), 获得原来的大数m: m = cd mod n
再把m转换为M, 小李即获得小张的原始消息.

这个过程之因此能经过,具体的证实过程要用到欧拉定理,详细知识请参考这里

选取的素数p和q要足够大,从而乘积n足够大,在事先不知道p和q的状况下分解n是计算上不可行的。因为进行的都是大数计算,使得RSA最快的状况也比DES慢上倍,不管是软件仍是硬件实现。速度一直是RSA的缺陷。通常来讲只用于少许数据加密。RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操做。RSA是被研究得最普遍的公钥算法,从提出到如今已近二十年,经历了各类攻击的考验,逐渐为人们接受,广泛认为是目前最优秀的公钥方案之一。

相关文章
相关标签/搜索