此篇是看 數字簽名是什麼? 的理解與筆記html
1. 使用非對稱密鑰發送數據到服務器。 發送方(C端)使用公鑰對本身的數據進行加密,接收方(S端)使用私鑰解密,即便發送出去的數據被攔截到,也不知道明文是什麼,由於使用公鑰加密的數據只有私鑰才能解開
好比用戶註冊的時候,爲了保護用戶的密碼不被泄露,在C端用公鑰對密碼進行加密,在S端用私鑰解密, 而後S端返回一個明文信息給C端git
2. 針對第一步S端發給C端的明文信息,若是被黑客攔截篡改,那麼C端是不知道的。好比S端返回給C端的信息是 "註冊成功!" 而被篡改爲 "註冊失敗!" 這時C端是不知道的。
爲了解決這個問題。S端先將數據進行hash運算,獲得一個hash值(好比取MD5值),再將這個hash值用私鑰加密,附加在明文信息的最後,便是數字簽名
C端收到S端數據後,[1]取出後面的數字簽名,[2]用公鑰將數字簽名解密,[3]對明文信息進行hash運算,[4]對比本身運算出來的hash值和數字簽名解密出來的hash值是否一致,若是一致,表示數據沒有篡改,不然,數據被篡改服務器
考慮上面的過程,若是S端發給C端的帶數字簽名的明文數據被黑客攔截,那麼黑客沒法作到在修改過明文信息後而不被C端發覺, 由於若是黑客修改明文,那麼被篡改的數據的hash值與簽名的hash值必定不一樣,而黑客又沒法對篡改過的數據進行數字簽名,由於數字簽名是用私鑰對hash值加密,而黑客沒有私鑰。 數字簽名是 [明文的hash值再用私鑰加密獲得的一組數據]加密