hash算法
其實就是將一段非常長的數據通過hash變換為一個固定長度相對較短的數據,簡稱“摘要”。
hash算法的種類很多。
hash碰撞
hash可以將任意長度的數據變為一個固定長度的值,算法的精妙在於這個值對於不同的數據還是不一樣的,如果不同的數據生成的hash值一樣,就是有名的“hash碰撞了”
MD5加密
比如很多網站喜歡將用戶的密碼經過MD5變換后存儲,主要防止數據庫泄露后直接查看用戶的密碼,真正密碼比對時對用戶輸入的密碼進行md5變換然后和存儲的md5值比較
從密碼學上講加密過程都要對應解密過程,即可以通過密文還原明文,所以以上的密碼保護方法不是嚴格意義上的數據加密解密。
不對稱加密:
不對稱加密一個重要特點就是:公鑰加密的數據私鑰可以解密,私鑰加密的數據公鑰可以解密,
個人理解:不對稱加密應該是3部分組成,公鑰和私鑰還有創建者算法。一般暴露的是公鑰和私鑰,創建者算法由第三方權威保留。
數字簽名是兩個過程:
先對數據進行hash摘要,然后對摘要進行私鑰加密。
目的:數字簽名解密后和數據解密后的明文hash算法后進行對比。這個過程叫做驗證簽名
個人理解:不管是md5還是不對稱加密,可能多種數據加密后出現相同結果,只是概率小,有好處也有壞處。
壞處是,不能唯一的標識一個數據(但數據一般是有格式的,雖然滿足這個結果但是數據格式未必就能正確,變得不可識別,可以偽造,但是很難被認可)。
好處是,因為並不唯一,破解得到結果就不確定,需要對所有結果進行驗證。而且這個數據的大小是不確定的造成很大的計算量。
而數字簽名和不對稱加密一起使用:更加有利於對數據正確性的驗證。同時增加了偽造數據的難度。
一般的加密過程應該至少有2套公鑰和私鑰:
1),所以人公用一套公鑰用來查看消息(這個消息必須是可以公開的因為所有人可以解密),發送消息每人配一套私鑰
2),每個人都有一個公鑰和私鑰對應2套加密(一個用來加密發送,一個用來解密接收)
密鑰套數和人數量(n)的關系:1)是n+1;2)是2n