天天看點

加密解密與加簽驗簽

定義:

首先明确一個概念,公鑰和私鑰配對的,用公鑰加密的檔案,隻有對應的私鑰才能解密。當然也可以反過來,用私鑰加密,用對應的公鑰進行解密。

加密:發送方利用接收方的公鑰對要發送的明文進行加密。

解密:接受方利用自己的私鑰對加密檔案進行解密。

加簽驗簽開始前,收發雙方會提前交換彼此公鑰。

加簽:發送方用一個哈希函數從封包文本中生成封包摘要(一般使用MD5算法:不可逆的加密算法),然後用自己的私人密鑰對這個摘要進行加密,得到的就是這個封包對應的數字簽名。通常來說,發送方會把數字簽名和封包原文一并發送給接受者。

一般用到的算法如RSA(非對稱加密算法/數字簽名算法,這種加密算法的特點主要是密鑰的變化,DES隻有一個密鑰。相當于隻有一把鑰匙,如果這把鑰匙丢了,資料也就不安全了)

驗簽:接收方得到原始封包和數字簽名後,用同一個哈希函數從封包中生成摘要A,另外,用發送方提供的公鑰對數字簽名進行解密,得到摘要B,對比A和B是否相同,就可以得知封包有沒有被篡改過。

數字簽名的作用:

一是能确定消息确實是由發送方簽名并發出來的,也就是驗證發送的源頭,因為别人假冒不了發送方的簽名。

二是數字簽名能确定消息的完整性,也就是防篡改。

存在的問題及解決方案(數字信封):

很容易看得出來,數字簽名技術有一個問題,就是原始封包是明文傳輸的,這對一些敏感内容來說通常是不合适的,是以有些時候,這兩種技術會結合起來使用。

發送方用自己的私鑰完成數字簽名,然後再用接收方的公鑰對封包進行加密,将數字簽名和封包傳送給接收方。

接收方在拿到密文和數字簽名後,先用自己的私鑰對密文進行解密,得到明文,然後再用發送方提供的公鑰進行驗簽,確定發送方身份的準确性,以及封包并沒有被篡改過。

大緻流程:

一、發送方(RSAwithSHA、RSAwithMD5):

1.對傳輸的封包進行摘要,主要的算法有MD5和SHA

2.對摘要用自己的私鑰進行加密生成簽名,一般用到的算法如RSA(非對稱加密算法/數字簽名算法,這種加密算法的特點主要是密鑰的變化,DES隻有一個密鑰。相當于隻有一把鑰匙,如果這把鑰匙丢了,資料也就不安全了)

3.傳輸封包及簽名

二、接收方:

1.對接收到的封包用同樣的算法進行摘要

2.用發送方的公鑰對發送方的簽名進行解密得到發送方的摘要

3.對比兩份摘要看是否有不同以驗證是否被篡改

補充AC業務中的加驗簽

在國際超網中,公私鑰主要用來做加驗簽。

clientId是不同站點網關系統間進行通信的身份辨別,如在EZ-Link與GN通信時,雙方約定使用305XST7YSG0QCJ03263此clientId進行通信,則在雙發收發的請求和響應封包頭中clientId都為305XST7YSG0QCJ03263。

兩個站點準備互相通信前,會分别生成一對公私鑰,然後交換彼此的公鑰,并把自己的公私鑰和對方公鑰與clientId建立關聯。

一個站點給給對方發送請求或傳回響應時,會使用clientId上綁定的己方私鑰對封包内容(GN标準中還包含發送位址URL)進行加簽,并将得到的簽名資訊放入封包頭中。

另一個站點接收到請求後,會使用clientId上綁定的對方公鑰對簽名進行解密,然後對比解密出的明文與封包内容是否一緻,一緻時說明此封包未被篡改。

繼續閱讀