轉載自:http://www.cnblogs.com/sochishun/p/7028056.htmlhtml
加密技術一般分爲兩大類:"對稱式"和"非對稱式"。git
對稱性加密算法:對稱式加密就是加密和解密使用同一個密鑰。信息接收雙方都需事先知道密匙和加解密算法且其密匙是相同的,以後即是對數據進行加解密了。對稱加密算法用來對敏感數據等信息進行加密。正則表達式
非對稱算法:非對稱式加密就是加密和解密所使用的不是同一個密鑰,一般有兩個密鑰,稱爲"公鑰"和"私鑰",它們兩個必需配對使用,不然不能打開加密文件。發送雙方A,B事先均生成一堆密匙,而後A將本身的公有密匙發送給B,B將本身的公有密匙發送給A,若是A要給B發送消 息,則先須要用B的公有密匙進行消息加密,而後發送給B端,此時B端再用本身的私有密匙進行消息解密,B向A發送消息時爲一樣的道理。算法
散列算法:散列算法,又稱哈希函數,是一種單向加密算法。在信息安全技術中,常常須要驗證消息的完整性,散列(Hash)函數提供了這一服務,它對不一樣長度的輸入消息,產生固定長度的輸出。這個固定長度的輸出稱爲原輸入消息的"散列"或"消息摘要"(Message digest)。散列算法不算加密算法,由於其結果是不可逆的,既然是不可逆的,那麼固然不是用來加密的,而是簽名。數據庫
對稱性加密算法有:AES、DES、3DES
用途:對稱加密算法用來對敏感數據等信息進行加密編程
DES(Data Encryption Standard):數據加密標準,速度較快,適用於加密大量數據的場合。數組
3DES(Triple DES):是基於DES,對一塊數據用三個不一樣的密鑰進行三次加密,強度更高。安全
AES(Advanced Encryption Standard):高級加密標準,是下一代的加密算法標準,速度快,安全級別高;AES是一個使用128爲分組塊的分組加密算法,分組塊和12八、192或256位的密鑰一塊兒做爲輸入,對4×4的字節數組上進行操做。衆所周之AES是種十分高效的算法,尤爲在8位架構中,這源於它面向字節的設計。AES 適用於8位的小型單片機或者普通的32位微處理器,而且適合用專門的硬件實現,硬件實現可以使其吞吐量(每秒能夠到達的加密/解密bit數)達到十億量級。一樣,其也適用於RFID系統。網絡
非對稱性算法有:RSA、DSA、ECC架構
RSA:由 RSA 公司發明,是一個支持變長密鑰的公共密鑰算法,須要加密的文件塊的長度也是可變的。RSA在國外早已進入實用階段,已研製出多種高速的RSA的專用芯片。
DSA(Digital Signature Algorithm):數字簽名算法,是一種標準的 DSS(數字簽名標準),嚴格來講不算加密算法。
ECC(Elliptic Curves Cryptography):橢圓曲線密碼編碼學。ECC和RSA相比,具備多方面的絕對優點,主要有:抗攻擊性強。相同的密鑰長度,其抗攻擊性要強不少倍。計算量小,處理速度快。ECC總的速度比RSA、DSA要快得多。存儲空間佔用小。ECC的密鑰尺寸和系統參數與RSA、DSA相比要小得多,意味着它所佔的存貯空間要小得多。這對於加密算法在IC卡上的應用具備特別重要的意義。帶寬要求低。當對長消息進行加解密時,三類密碼系統有相同的帶寬要求,但應用於短消息時ECC帶寬要求卻低得多。帶寬要求低使ECC在無線網絡領域具備普遍的應用前景。
散列算法(簽名算法)有:MD五、SHA一、HMAC
用途:主要用於驗證,防止信息被修。具體用途如:文件校驗、數字簽名、鑑權協議
MD5:MD5是一種不可逆的加密算法,目前是最牢靠的加密算法之一,尚沒有可以逆運算的程序被開發出來,它對應任何字符串均可以加密成一段惟一的固定長度的代碼。
SHA1:是由NISTNSA設計爲同DSA一塊兒使用的,它對長度小於264的輸入,產生長度爲160bit的散列值,所以抗窮舉(brute-force)性更好。SHA-1設計時基於和MD4相同原理,而且模仿了該算法。SHA-1是由美國標準技術局(NIST)頒佈的國家標準,是一種應用最爲普遍的Hash函數算法,也是目前最早進的加密技術,被政府部門和私營業主用來處理敏感的信息。而SHA-1基於MD5,MD5又基於MD4。
HMAC:是密鑰相關的哈希運算消息認證碼(Hash-based Message Authentication Code),HMAC運算利用哈希算法,以一個密鑰和一個消息爲輸入,生成一個消息摘要做爲輸出。也就是說HMAC是須要一個密鑰的。因此,HMAC_SHA1也是須要一個密鑰的,而SHA1不須要。
其餘經常使用算法:
Base64:其實不是安全領域下的加密解密算法,只能算是一個編碼算法,一般用於把二進制數據編碼爲可寫的字符形式的數據,對數據內容進行編碼來適合傳輸(能夠對img圖像編碼用於傳輸)。這是一種可逆的編碼方式。編碼後的數據是一個字符串,其中包含的字符爲:A-Z、a-z、0-九、+、/,共64個字符(26 + 26 + 10 + 1 + 1 = 64,實際上是65個字符,「=」是填充字符。Base64要求把每三個8Bit的字節轉換爲四個6Bit的字節(3*8 = 4*6 = 24),而後把6Bit再添兩位高位0,組成四個8Bit的字節,也就是說,轉換後的字符串理論上將要比原來的長1/3。原文的字節最後不夠3個的地方用0來補足,轉換時Base64編碼用=號來代替。這就是爲何有些Base64編碼會以一個或兩個等號結束的緣由,中間是不可能出現等號的,但等號最多隻有兩個。其實不用"="也不耽誤解碼,之因此用"=",多是考慮到多段編碼後的Base64字符串拼起來也不會引發混淆。)
Base64編碼是從二進制到字符的過程,像一些中文字符用不一樣的編碼轉爲二進制時,產生的二進制是不同的,因此最終產生的Base64字符也不同。例如"上網"對應utf-8格式的Base64編碼是"5LiK572R", 對應GB2312格式的Base64編碼是"yc/N+A=="。
標準的Base64並不適合直接放在URL裏傳輸,由於URL編碼器會把標準Base64中的「/」和「+」字符變爲形如「%XX」的形式,而這些「%」號在存入數據庫時還須要再進行轉換,由於ANSI SQL中已將「%」號用做通配符。
爲解決此問題,可採用一種用於URL的改進Base64編碼,它不在末尾填充'='號,並將標準Base64中的「+」和「/」分別改爲了「-」和「_」,這樣就免去了在URL編解碼和數據庫存儲時所要做的轉換,避免了編碼信息長度在此過程當中的增長,並統一了數據庫、表單等處對象標識符的格式。
另有一種用於正則表達式的改進Base64變種,它將「+」和「/」改爲了「!」和「-」,由於「+」,「*」以及前面在IRCu中用到的「[」和「]」在正則表達式中均可能具備特殊含義。
此外還有一些變種,它們將「+/」改成「_-」或「._」(用做編程語言中的標識符名稱)或「.-」(用於XML中的Nmtoken)甚至「_:」(用於XML中的Name)。
HTTPS(全稱:Hypertext Transfer Protocol over Secure Socket Layer),是以安全爲目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL(SSL使用40 位關鍵字做爲RC4流加密算法,這對於商業信息的加密是合適的。),所以加密的詳細內容就須要SSL。https:URL代表它使用了HTTP,但HTTPS存在不一樣於HTTP的默認端口及一個加密/身份驗證層(在HTTP與TCP之間),提供了身份驗證與加密通信方法,如今它被普遍用於萬維網上安全敏感的通信,例如交易支付方面。它的主要做用能夠分爲兩種:一種是創建一個信息安全通道,來保證數據傳輸的安全;另外一種就是確認網站的真實性。
項目應用總結: 1. 加密算法是可逆的,用來對敏感數據進行保護。散列算法(簽名算法、哈希算法)是不可逆的,主要用於身份驗證。 2. 對稱加密算法使用同一個密匙加密和解密,速度快,適合給大量數據加密。對稱加密客戶端和服務端使用同一個密匙,存在被抓包破解的風險。 3. 非對稱加密算法使用公鑰加密,私鑰解密,私鑰簽名,公鑰驗籤。安全性比對稱加密高,但速度較慢。非對稱加密使用兩個密匙,服務端和客戶端密匙不同,私鑰放在服務端,黑客通常是拿不到的,安全性高。 4. Base64不是安全領域下的加解密算法,只是一個編碼算法,一般用於把二進制數據編碼爲可寫的字符形式的數據,特別適合在http,mime協議下的網絡快速傳輸數據。UTF-8和GBK中文的Base64編碼結果是不一樣的。採用Base64編碼不只比較簡短,同時也具備不可讀性,即所編碼的數據不會被人用肉眼所直接看到,但這種方式很初級,很簡單。Base64能夠對圖片文件進行編碼傳輸。 5. https協議普遍用於萬維網上安全敏感的通信,例如交易支付方面。它的主要做用能夠分爲兩種:一種是創建一個信息安全通道,來保證數據傳輸的安全;另外一種就是確認網站的真實性。 6. 大量數據加密建議採用對稱加密算法,提升加解密速度;小量的機密數據,能夠採用非對稱加密算法。在實際的操做過程當中,咱們一般採用的方式是:採用非對稱加密算法管理對稱算法的密鑰,而後用對稱加密算法加密數據,這樣咱們就集成了兩類加密算法的優勢,既實現了加密速度快的優勢,又實現了安全方便管理密鑰的優勢。 7. MD5標準密鑰長度128位(128位是指二進制位。二進制太長,因此通常都改寫成16進制,每一位16進制數能夠代替4位二進制數,因此128位二進制數寫成16進制就變成了128/4=32位。16位加密就是從32位MD5散列中把中間16位提取出來);sha1標準密鑰長度160位(比MD5摘要長32位),Base64轉換後的字符串理論上將要比原來的長1/3。