哈希散列
哈希散列並不能算是嚴格意義上的加密技術,因此我把它稱為通用意義上的加密技術,哈希散列的通用定義是:通過一些不可逆的哈希算法將原本的明文內容轉化為散列后的密文內容。 由於散列算法幾乎不可逆,因此攻擊者幾乎無法通過密文猜測到對應的明文內容。通過這種機制做到加密控制,典型的算法由我們之前耳熟能詳的md5加密算法。
但是彩虹表技術的興起,可以建立彩虹表進行查表破解,目前這種方式已經很不安全了。為了使之安全通常的做法是加隨機鹽,多次哈希
對稱加密(又稱私鑰加密)
對稱加密是最快速、最簡單的一種加密方式,加密(encryption)與解密(decryption)用的是同樣的密鑰(secret key),這種方法在密碼學中叫做對稱加密算法。對稱加密有很多種算法,由於它效率很高,所以被廣泛使用在很多加密協議的核心當中。對稱加密通常使用的是相對較小的密鑰,一般小於256 bit。因為密鑰越大,加密越強,但加密與解密的過程越慢。如果你只用1 bit來做這個密鑰,那黑客們可以先試着用0來解密,不行的話就再用1解;但如果你的密鑰有1 MB大,黑客們可能永遠也無法破解,但加密和解密的過程要花費很長的時間。密鑰的大小既要照顧到安全性,也要照顧到效率,是一個trade-off
看似貌似非常完美,但有個致命的問題在於這個密鑰存儲在哪里才安全,服務端由於都是受到防火牆並且多道密碼的保護,一般很少會被人攻破,但客戶端,尤其是運行在瀏覽器上的html,js等文件確是直接以可運行的明文代碼的方式跑在用戶瀏覽器上的,直接在客戶端加密就等於把自己的加密算法和保護密鑰全直接送給攻擊者,因此這類的加密方式只適用於服務端與服務端之間的交互
非對稱加密(又稱公鑰加密)
1976年,美國學者Dime和Henman為解決信息公開傳送和密鑰管理問題,提出一種新的密鑰交換協議,允許在不安全的媒體上的通訊雙方交換信息,安全地達成一致的密鑰,這就是“公開密鑰系統”。相對於“對稱加密算法”這種方法也叫做“非對稱加密算法”。非對稱加密為數據的加密與解密提供了一個非常安全的方法,它使用了一對密鑰,公鑰(public key)和私鑰(private key)。私鑰只能由一方安全保管,不能外泄,而公鑰則可以發給任何請求它的人。非對稱加密使用這對密鑰中的一個進行加密,而解密則需要另一個密鑰。比如,你向銀行請求公鑰,銀行將公鑰發給你,你使用公鑰對消息加密,那么只有私鑰的持有人--銀行才能對你的消息解密。與對稱加密不同的是,銀行不需要將私鑰通過網絡發送出去,因此安全性大大提高。
對稱加密與非對稱加密區別
對稱密鑰加密我們從定義中應該就可以明白,它是信息的發送方和接收方都用同一個秘鑰去加密和解密數據。這樣做它的最大優勢是加/解密速度快,適合於對大數據量進行密,但密鑰管理困難。
非對稱密鑰加密,它需要使用“一對”密鑰來分別完成加密和解密操作,一個公開發布,即公開密鑰,另一個由用戶自己秘密保存,即私用密鑰。信息發送者用公開密鑰去加密,而信息接收者則用私用密鑰去解密。公鑰機制靈活,但加密和解密速度卻比對稱密鑰加密慢得多。
tips:
從上面大家應該可以看出對稱加密和非對稱加密的區別,下面稍微進行一下總結:
(1) 對稱加密加密與解密使用的是同樣的密鑰,所以速度快,但由於需要將密鑰在網絡傳輸,所以安全性不高。
(2) 非對稱加密使用了一對密鑰,公鑰與私鑰,所以安全性高,但加密與解密速度慢。
(3) 解決的辦法是將對稱加密的密鑰使用非對稱加密的公鑰進行加密,然后發送出去,接收方使用私鑰進行解密得到對稱加密的密鑰,然后雙方可以使用對稱加密來進行溝通。
標紅色的地方是重點,這是目前在通信方面最安全的做法