在開發過程當中,經常用到各類加密方法和算法,本文總結了幾種經常使用加密方法的原理。html
加密和解密數據使用同一個密鑰,適合對大量數據進行加解密算法
關鍵是密鑰的保存方式,加密或是解密的任何一方泄漏密鑰,都會致使信息泄漏安全
DES、3DES、Blowfish、IDEA、RC四、RC五、RC六、AES等函數
- 移位和循環移位
移位就是將一段數碼按照規定的位數總體性地左移或右移。循環右移就是當右移時,把數碼的最後的位移到數碼的最前頭,循環左移正相反。例如,對十進制數碼12345678循環右移1位(十進制位)的結果爲81234567,而循環左移1位的結果則爲23456781。ui
- 置換
就是將數碼中的某一位的值根據置換表的規定,用另外一位代替。它不像移位操做那樣整齊有序,看上去雜亂無章。這正是加密所需,被常常應用。加密
- 擴展
就是將一段數碼擴展成比原來位數更長的數碼。擴展方法有多種,例如,能夠用置換的方法,以擴展置換表來規定擴展後的數碼每一位的替代值。spa
- 壓縮
就是將一段數碼壓縮成比原來位數更短的數碼。壓縮方法有多種,例如,也能夠用置換的方法,以表來規定壓縮後的數碼每一位的替代值。.net
- 異或
這是一種二進制布爾代數運算。異或的數學符號爲⊕ ,它的運算法則以下:
1⊕1 = 0
0⊕0 = 0
1⊕0 = 1
0⊕1 = 1
也能夠簡單地理解爲,參與異或運算的兩數位如相等,則結果爲0,不等則爲1。htm
- 迭代
迭代就是屢次重複相同的運算,這在密碼算法中常常使用,以使得造成的密文更加難以破解。blog
非對稱加密算法須要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對,若是用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;若是用私有密鑰對數據進行加密,那麼只有用對應的公開密鑰才能解密
公鑰能夠被任何人知道,可是私鑰被泄漏就會致使信息泄漏
數字簽名,私鑰擁有者對信息進行加密,接受者使用公鑰解密成功,就能夠肯定發送者的身份
一般是1024,2048等。密鑰長度增加一倍,公鑰操做所需時間增長約4倍,私鑰操做所需時間增長約8倍,公私鑰生成時間約增加16倍
加密的明文長度不能超過RSA密鑰的長度減去11byte,好比密鑰長度是1024位的,1024位=1024bit=128byte,128-11=117byte,因此明文長度不能超過117byte,若是長度超過該值將會拋出異常。加密後密文的長度爲密鑰的長度,如密鑰長度爲1024bit(128Byte),最後生成的密文固定爲 1024bit(128Byte)
DES、3DES、Blowfish、IDEA、RC四、RC五、RC六、AES等
採用某種散列函數,輸入不一樣長度的明文,獲得相同的長度的密文,明文的微小變化都能引發密文的巨大變化。其實哈希散列算法不算是真正的加密,而是生成對應明文的指紋信息,用來校驗數據的完整性。
不能經過密文反推明文,一般做爲數據的完整性校驗
生成信息摘要,驗證信息的完整性
不用明文存儲用戶密碼,好比使用md5(md5(用戶密碼)+salt)來存儲密碼和驗證密碼,防止攻擊者用彩虹表攻擊
MD二、MD四、MD五、PANAMA、SHA-0、SHA-一、SHA-25六、SHA-512等
名稱 | 密鑰長度 | 運算速度 | 安全性 | 資源消耗 | 加密類型 |
---|---|---|---|---|---|
DES | 56位 | 較快 | 低 | 中 | 對稱 |
3DES | 168位 | 慢 | 中 | 高 | 對稱 |
IDEA | 128位 | 較慢 | 中 | 高 | 對稱 |
AES | 12八、19二、256位 | 快 | 高 | 低 | 對稱 |
RSA | 102四、204八、307二、4096 | 慢 | 高 | 高 | 非對稱 |
DSA | 102四、204八、307二、4096 | 慢 | 高 | 低 | 非對稱 |
ECC | 256 | 快 | 高 | 低 | 非對稱 |
SHA-1 | 慢 | 高 | 低 | 散列 | |
MD5 | 快 | 中 | 低 | 散列 |