對稱加密:雙方使用的同一個密鑰,既能夠加密又能夠解密,這種加密方法稱爲對稱加密,也稱爲單密鑰加密。html
優勢:速度快,對稱性加密一般在消息發送方須要加密大量數據時使用,算法公開、計算量小、加密速度快、加密效率高。git
缺點:在數據傳送前,發送方和接收方必須商定好祕鑰,而後 使雙方都能保存好祕鑰。其次若是一方的祕鑰被泄露,那麼加密信息也就不安全了。另外,每對用戶每次使用對稱加密算法時,都須要使用其餘人不知道的惟一祕 鑰,這會使得收、發雙方所擁有的鑰匙數量巨大,密鑰管理成爲雙方的負擔。算法
在對稱加密算法中經常使用的算法有:DES、AES等。數據庫
AES:密鑰的長度能夠爲12八、192和256位,也就是16個字節、24個字節和32個字節安全
DES:密鑰的長度64位,8個字節。工具
非對稱加密:一對密鑰由公鑰和私鑰組成(可使用不少對密鑰)。私鑰解密公鑰加密數據,公鑰解密私鑰加密數據(私鑰公鑰能夠互相加密解密)。性能
私鑰只能由一方保管,不能外泄。公鑰能夠交給任何請求方。測試
在非對稱加密算法中經常使用的算法有: 優化
RSA、Elgamal、揹包算法、Rabin、Diffie-Hellman、ECC(橢圓曲線加密算法)。
使用最普遍的是RSA算法,Elgamal是另外一種經常使用的非對稱加密算法。網站
缺點:速度較慢
優勢:安全
1.分類
加密算法首先分爲兩種:單向加密、雙向加密。
單向加密是不可逆的,也就是隻能加密,不能解密。一般用來傳輸相似用戶名和密碼,直接將加密後的數據提交到後臺,由於後臺不須要知道用戶名和密碼,能夠直接將收到的加密後的數據存儲到數據庫。
雙向加密算法一般分爲對稱性加密算法和非對稱性加密算法,對於對稱性加密算法,信息接收雙方都需事先知道密匙和加解密算法且其密匙是相同的,以後即是對數據進行 加解密了。非對稱算法與之不一樣,發送雙方A,B事先均生成一堆密匙,而後A將本身的公有密匙發送給B,B將本身的公有密匙發送給A,若是A要給B發送消 息,則先須要用B的公有密匙進行消息加密,而後發送給B端,此時B端再用本身的私有密匙進行消息解密,B向A發送消息時爲一樣的道理。
2.經常使用算法
幾種對稱性加密算法:AES,DES,3DES
DES是一種分組數據加密技術(先將數據分紅固定長度的小數據塊,以後進行加密),速度較快,適用於大量數據加密,而3DES是一種基於DES的加密算法,使用3個不一樣密匙對同一個分組數據塊進行3次加密,如此以使得密文強度更高。
相較於DES和3DES算法而言,AES算法有着更高的速度和資源使用效率,安全級別也較之更高了,被稱爲下一代加密標準。
幾種非對稱性加密算法:RSA,DSA,ECC
RSA和DSA的安全性及其它各方面性能都差很少,而ECC較之則有着不少的性能優越,包括處理速度,帶寬要求,存儲空間等等。
幾種線性散列算法(簽名算法):MD5,SHA1,HMAC
這幾種算法只生成一串不可逆的密文,常常用其效驗數據傳輸過程當中是否通過修改,由於相同的生成算法對於同一明文只會生成惟一的密文,若相同算法生成的密文不一樣,則證實傳輸數據進行過了修改。一般在數據傳說過程前,使用MD5和SHA1算法均須要發送和接收數據雙方在數據傳送以前就知道密匙生成算法,而HMAC與之不一樣的是須要生成一個密匙,發送方用此密匙對數據進行摘要處理(生成密文),接收方再利用此密匙對接收到的數據進行摘要處理,再判斷生成的密文是否相同。
3.加密算法選用
對於各類加密算法的選用:
因爲對稱加密算法的密鑰管理是一個複雜的過程,密鑰的管理直接決定着他的安全性,所以當數據量很小時,咱們能夠考慮採用非對稱加密算法。
在實際的操做過程當中,咱們一般採用的方式是:採用非對稱加密算法管理對稱算法的密鑰,而後用對稱加密算法加密數據,這樣咱們就集成了兩類加密算法的優勢,既實現了加密速度快的優勢,又實現了安全方便管理密鑰的優勢。
若是在選定了加密算法後,那採用多少位的密鑰呢?通常來講,密鑰越長,運行的速度就越慢,應該根據的咱們實際須要的安全級別來選擇,通常來講,RSA建議採用1024位的數字,ECC建議採用160位,AES採用128爲便可。
對於幾種加密算法的內部實現原理,有興趣的能夠細細研究。而對於其實現而言,網上有不少開源版本,比較經典的是PorlaSSL(官網:http://en.wikipedia.org/wiki/PolarSSL )。其它語言如JAVA,OBJC也都有相應的類庫可使用。
常見加密算法 :
DES(Data Encryption Standard):數據加密標準,速度較快,適用於加密大量數據的場合;
3DES(Triple DES):是基於DES,對一塊數據用三個不一樣的密鑰進行三次加密,強度更高;
RC2和 RC4:用變長密鑰對大量數據進行加密,比 DES 快;
IDEA(International Data Encryption Algorithm)國際數據加密算法:使用 128 位密鑰提供很是強的安全性;
RSA:由 RSA 公司發明,是一個支持變長密鑰的公共密鑰算法,須要加密的文件塊的長度也是可變的;
DSA(Digital Signature Algorithm):數字簽名算法,是一種標準的 DSS(數字簽名標準);
AES(Advanced Encryption Standard):高級加密標準,是下一代的加密算法標準,速度快,安全級別高,目前 AES 標準的一個實現是 Rijndael 算法;
BLOWFISH,它使用變長的密鑰,長度可達448位,運行速度很快;
其它算法,如ElGamal、Deffie-Hellman、新型橢圓曲線算法ECC等。 好比說,MD5,你在一些比較正式而嚴格的網站下的東西通常都會有MD5值給出,如安全焦點的軟件工具,每一個都有MD5。嚴格來講MD5並不能算是一種加密算法,只能說是一種摘要算法(數據摘要算法是密碼學算法中很是重要的一個分支,它經過對全部數據提取指紋信息以實現數據簽名、數據完整性校驗等功能,因爲其不可逆性,有時候會被用作敏感信息的加密。數據摘要算法也被稱爲哈希(Hash)算法、散列算法。)
MD5分類:
1、CRC8、CRC16、CRC32
CRC(Cyclic Redundancy Check,循環冗餘校驗)算法出現時間較長,應用也十分普遍,尤爲是通信領域,如今應用最多的就是 CRC32 算法,它產生一個4字節(32位)的校驗值,通常是以8位十六進制數,如FA 12 CD 45等。CRC算法的優勢在於簡便、速度快,嚴格的來講,CRC更應該被稱爲數據校驗算法,但其功能與數據摘要算法相似,所以也做爲測試的可選算法。
在 WinRAR、WinZIP 等軟件中,也是以 CRC32 做爲文件校驗算法的。通常常見的簡單文件校驗(Simple File Verify – SFV)也是以 CRC32算法爲基礎,它經過生成一個後綴名爲 .SFV 的文本文件,這樣能夠任什麼時候候能夠將文件內容 CRC32運算的結果與 .SFV 文件中的值對比來肯定此文件的完整性。
與 SFV 相關工具軟件有不少,如MagicSFV、MooSFV等。
2、MD2 、MD4、MD5
這是應用很是普遍的一個算法家族,尤爲是 MD5(Message-Digest Algorithm 5,消息摘要算法版本5),它由MD2、MD3、MD4發展而來,由Ron Rivest(RSA公司)在1992年提出,被普遍應用於數據完整性校驗、數據(消息)摘要、數據加密等。MD2、MD4、MD5 都產生16字節(128位)的校驗值,通常用32位十六進制數表示。MD2的算法較慢但相對安全,MD4速度很快,但安全性降低,MD5比MD4更安全、速度更快。
在互聯網上進行大文件傳輸時,都要得用MD5算法產生一個與文件匹配的、存儲MD5值的文本文件(後綴名爲 .md5或.md5sum),這樣接收者在接收到文件後,就能夠利用與 SFV 相似的方法來檢查文件完整性,絕大多數大型軟件公司或開源組織都是以這種方式來校驗數據完整性,並且部分操做系統也使用此算法來對用戶密碼進行加密,另外,它也是目前計算機犯罪中數據取證的最經常使用算法。
與MD5 相關的工具備不少,如 WinMD5等。
3、SHA1、SHA256、SHA384、SHA512
SHA(Secure Hash Algorithm)是由美國專門制定密碼算法的標準機構-- 美國國家標準技術研究院(NIST)制定的,SHA系列算法的摘要長度分別爲:SHA爲20字節(160位)、SHA256爲32字節(256位)、 SHA384爲48字節(384位)、SHA512爲64字節(512位),因爲它產生的數據摘要的長度更長,所以更難以發生碰撞,所以也更爲安全,它是將來數據摘要算法的發展方向。因爲SHA系列算法的數據摘要長度較長,所以其運算速度與MD5相比,也相對較慢。
SHA1的應用較爲普遍,主要應用於CA和數字證書中,另外在互聯網中流行的BT軟件中,也是使用SHA1來進行文件校驗的。
4、RIPEMD、PANAMA、TIGER、ADLER32 等
RIPEMD是Hans Dobbertin等3人在對MD4,MD5缺陷分析基礎上,於1996年提出來的,有4個標準128、160、256和320,其對應輸出長度分別爲16字節、20字節、32字節和40字節。
TIGER由Ross在1995年提出。Tiger號稱是最快的Hash算法,專門爲64位機器作了優化。