連接html
數字簽名 git
基本概念算法
摘要(digest):摘要、hash、散列 有時候會混爲一談,大部分都是一個東西
將長度不固定的消息做爲輸入,經過運行hash函數,生成固定長度的輸出,這段輸出就叫作摘要。一般用來驗證消息完整、未被篡改。
摘要運算是不可逆的。也就是說,輸入固定的狀況下,產生固定的輸出。但知道輸出的狀況下,沒法反推出輸入。
常見的摘要算法 與 對應的輸出位數以下:
MD5:128位
SHA-1:160位
SHA256 :256位
SHA512:512位函數
MAC(Message Authentication Code):消息認證碼,用以保證數據的完整性。運算結果取決於消息自己、祕鑰。
MAC能夠有多種不一樣的實現方式,好比HMAC。
HMAC(Hash-based Message Authentication Code):能夠粗略地理解爲帶祕鑰的hash函數。加密
對稱加密:常見的對稱加密算法:DES、3DES、AES、Blowfish、RC五、IDEA。
非對稱加密:常見的非對稱加密算法:RSA、DSA、ElGamal。spa
簽名:一、確認信息來源於特定的主體。二、確認信息完整、未被篡改。
發送方生成簽名:
一、計算原始信息的摘要。
二、經過私鑰對摘要進行簽名,獲得電子簽名。
三、將原始信息、電子簽名,發送給接收方。
僞代碼:digest = hash(message); // 計算摘要
digitalSignature = sign(digest, priviteKey); // 計算數字簽名
接收方驗證簽名:
一、經過公鑰解開電子簽名,獲得摘要D1。(若是解不開,信息來源主體校驗失敗)
二、計算原始信息的摘要D2。
三、對比D一、D2,若是D1等於D2,說明原始信息完整、未被篡改。
僞代碼:digest1 = verify(digitalSignature, publicKey); // 獲取摘要
digest2 = hash(message); // 計算原始信息的摘要
digest1 === digest2 // 驗證是否相等htm