前后端數(shù)據(jù)交互安全
原因:因為http是無狀態(tài)協(xié)議, 信息傳輸是明文, 這會產生一個問題,那就是數(shù)據(jù)的安全, 如何防止數(shù)據(jù)被惡意截取修改等等
為了解決這個安全問題, 就有了數(shù)據(jù)加密
hash加密:MD5,SHA256
MD5和SHA256算法具有以下特點:
- 壓縮性:任意長度的數(shù)據(jù)或者是任意大小的文件,算出的值的長度是固定的。
- 抗修改性:對原數(shù)據(jù)進行任何改動,哪怕只修改1個字節(jié),所得到的MD5值都有很大區(qū)別。
- 強抗碰撞:已知原數(shù)據(jù)和其MD5值,想找到一個具有相同MD5值的數(shù)據(jù)(即偽造數(shù)據(jù))是非常困難的。
兩者的區(qū)別:
- MD5值長度都是32位的十六進制數(shù),SHA256值長度是64位的十六進制數(shù),因而SHA256安全性更高一些。
- MD5計算速度快,SHA256相對較慢
對稱加密:AES,DES
對稱加密是最快速、最簡單的一種加密方式,加密(encryption)與解密(decryption)用的是同樣的密鑰(secret key)。對稱加密有很多種算法,由于它效率很高,所以被廣泛使用在很多加密協(xié)議的核心當中。
對稱加密通常使用的是相對較小的密鑰,一般小于256 bit。因為密鑰越大,加密越強,但加密與解密的過程越慢。如果你只用1 bit來做這個密鑰,那黑客們可以先試著用0來解密,不行的話就再用1解;但如果你的密鑰有1 MB大,黑客們可能永遠也無法破解,但加密和解密的過程要花費很長的時間。密鑰的大小既要照顧到安全性,也要照顧到效率,是一個trade-off。
缺點:用戶將密碼發(fā)給服務端時,密碼被攻擊方用非常規(guī)手段截取了,那攻擊方就可以輕松獲取到用戶信息,這就不能做到保密的目的,在用戶私人信息經常被泄密的時代,對稱加密方式的缺點顯得越來越突出。
非對稱加密:RSA,DSA
非對稱加密會產生兩個東西,公鑰(public key)和私鑰(private key),公鑰是由私鑰生成的,公開密鑰與私有密鑰是一對,如果用公開密鑰對數(shù)據(jù)進行加密,只有用對應的私有密鑰才能解密;如果用私有密鑰對數(shù)據(jù)進行加密,那么只有用對應的公開密鑰才能解密。
雖然非對稱加密很安全,但是和對稱加密比起來,它非常的慢,所以我們還是要用對稱加密來傳送消息,但對稱加密所使用的密鑰我們可以通過非對稱加密的方式發(fā)送出去。為了解釋這個過程,請看下面的例子:
(1) Alice需要在銀行的網站做一筆交易,她的瀏覽器首先生成了一個隨機數(shù)作為對稱密鑰。
(2) Alice的瀏覽器向銀行的網站請求公鑰。
(3) 銀行將公鑰發(fā)送給Alice。
(4) Alice的瀏覽器使用銀行的公鑰將自己的對稱密鑰加密。
(5) Alice的瀏覽器將加密后的對稱密鑰發(fā)送給銀行。
(6) 銀行使用私鑰解密得到Alice瀏覽器的對稱密鑰。
(7) Alice與銀行可以使用對稱密鑰來對溝通的內容進行加密與解密了。
關于對稱和非對稱加密的總結
- 對稱加密加密與解密使用的是同樣的密鑰,所以速度快,但由于需要將密鑰在網絡傳輸,所以安全性不高。
- 非對稱加密使用了一對密鑰,公鑰與私鑰,所以安全性高,但加密與解密速度慢。
- 解決的辦法是將對稱加密的密鑰使用非對稱加密的公鑰進行加密,然后發(fā)送出去,接收方使用私鑰進行解密得到對稱加密的密鑰,然后雙方可以使用對稱加密來進行溝通。