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算法中,每一個通訊主體都有兩個鑰匙,一個公鑰一個私鑰。通常應用過程爲:
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是被研究得最普遍的公鑰算法,從提出到如今已近二十年,經歷了各類攻擊的考驗,逐漸爲人們接受,廣泛認爲是目前最優秀的公鑰方案之一。