散列函數 Hash
常見的有 MD5, SHA1, SHA256, 該類函數特點是函數單向不可逆,對輸入非常敏感,輸出長度固定,針對數據的任何修改都會改變散列函數的結果,用於防止信息篡改並驗證數據的完整性。
對稱機密
常見的有 AES-CBC,DES,3DS,AES-GCM 等,相同的密鑰可以用於信息的加密和解密,掌握密鑰才能獲取信息,能夠防止信息竊聽,通信方式是1對1;
非對稱加密
即常見的RSA算法,還包括 ECC,DH等算法,算法的特點是,密鑰成對出現,一般稱為公鑰(公開)和私鑰(保密),公鑰加密的信息只能私鑰解開,私鑰加密的信息只能公鑰解開。因此掌握公鑰的不同客戶端之間不能互相解密信息,只能掌握私鑰的服務器進行加密通信,服務器可以實現1對多的通信,客戶端也可以用來驗證掌握私鑰的服務器身份。
服務器產生一對密鑰,公鑰給別人即客戶端,客戶端用它來加密,加密后發給服務端,服務端用自己的私鑰解密后得到數據。
數字簽名就和上面的過程相反,即數據由服務端用私鑰加密,客戶端用服務端的公鑰解密,解得出來就說明這數據包的確是出服務端發過來的。
數字簽名是由服務端自己簽的,但沒人去驗證這個服務端是不是你所要訪問的真實的,所以需要第三方來幫忙檢驗,就和支付寶處於第三方來協調的位置一樣。這個第三方就叫CA。
服務器產生的公鑰就交給CA,CA用CA自己的私鑰加密,即數字簽名,加密生會生成證書,證書還是要交給服務端,放在服務端那邊。當客戶端訪問服務端時,服務端就會把這個證書安裝到客戶端上。
客戶端就會用CA提供的CA自己的公鑰來解密這個證書,(當然這個CA是瀏覽器預裝時嵌入的可信的CA,如果不是預裝時嵌入的CA,此時就沒有CA的公鑰,就解不了,就會彈出告警。)解得開就說明這個證書是某個CA認證過了的,是可信的,解開后就會得到數據,而這個數據就是服務端的公鑰,此時用這個公鑰與服務端進行數據傳輸。
數據傳輸過程中,由於RSA方式加解密速度非常慢,所以會把對稱與非對稱兩者結合起來用,即用RSA把對稱加密的密碼進行加密傳輸,再用對稱密碼進行加解密,這樣就可以提高效率,且是安全的。