數據簽名和數據加密的過程都是使用公開的密鑰系統,但實現的過程正好相反,
數據加密使用的是接受方的密鑰對,任何知道接受方公鑰的都可以向接受方發送消息,但是只有擁有私鑰的才能解密出來;
數據簽名使用的是發送方的密鑰對,任何接受方都可以用公鑰解密,驗證數據的正確性。
一句話總結:
數據加密保證了數據接受方的數據安全性。
數據簽名保證了數據發送方的數據安全性。
就拿A給B發送經過簽名加密信息來說:
1、A對信息簽名的作用是確認這個信息是A發出的,不是別人發出的;
2、加密是對內容進行機密性保護,主要是保證信息內容不會被其他人獲取,只有B可以獲取。
也就是保證整個過程的端到端的唯一確定性,這個信息是A發出的(不是別人),且是發給B的,只有B才被獲得具體內容(別人就算截獲信息也不能獲得具體內容)。
這只是大概說了作用,具體說來,涉及到密鑰相關的東西。密鑰有公鑰和私鑰之分。
那么這里一共有兩組四個密鑰:A的公鑰(PUB_A),A的私鑰(PRI_A);B的公鑰(PUB_B),B的私鑰(PRI_B)。
公鑰一般用來加密,私鑰用來簽名。
通常公鑰是公開出去的,但是私鑰只能自己私密持有。
公鑰和私鑰唯一對應,用某個公鑰簽名過得內容只能用對應的私鑰才能解簽驗證;同樣用某個私鑰加密的內容只能用對應的公鑰才能解密。
這時A向B發送信息的整個簽名和加密的過程如下:
1、A先用自己的私鑰(PRI_A)對信息(一般是信息的摘要)進行簽名。
2、A接着使用B的公鑰(PUB_B)對信息內容和簽名信息進行加密。
這樣當B接收到A的信息后,獲取信息內容的步驟如下:
1、用自己的私鑰(PRI_B)解密A用B的公鑰(PUB_B)加密的內容;
2、得到解密后的明文后用A的公鑰(PUB_A)解簽A用A自己的私鑰(PRI_A)的簽名。
從而整個過程就保證了開始說的端到端的唯一確認。A的簽名只有A的公鑰才能解簽,這樣B就能確認這個信息是A發來的;A的加密只有B的私鑰才能解密,這樣A就能確認這份信息只能被B讀取。
原文:https://blog.csdn.net/simonchi/article/details/38531971