1. 程式人生 > >RSA加解密與簽名驗籤

RSA加解密與簽名驗籤

1.RSA介紹

1.訊息摘要

如果訊息改變了,那麼改變之後的訊息的指紋和原訊息的指紋將不匹配,如果訊息的指紋和訊息是分開傳送的。那麼接收者就可以檢查訊息是否被篡改過。但是,如果我同時知道了訊息和指紋,就可以對訊息重新計算指紋,那麼訊息接收者就不會知道訊息被篡改了。解決這個問題就用到了RSA,公共金鑰加密技術。RSA包括公共金鑰和私有金鑰。公鑰可以告訴任何人。這些金鑰之間存在一定的數學關係。 假如我想傳送一條訊息給我的朋友,我的朋友想知道這個訊息是否來至於我,我首先會通過私鑰對我傳送的訊息進行摘要簽名。我的朋友在得到這條訊息之後會根據我提供的公鑰對訊息和簽名進行校驗。從而確定訊息沒有被篡改過,並且來至於我。
其實大多數時候簽名與驗籤是個相互的過程,例如支付寶支付介面,我用我的私鑰進行簽名,支付寶用 我提供的公鑰進行驗籤。然後支付寶會用私鑰簽名返回的資訊,我通過支付寶提供的公鑰對返回資訊進行驗籤。

2.程式碼示例

https://github.com/1789304191/rsa-test/blob/master/src/rsa/RSASIGNTEST.java

3.RSA非對稱加密

當資訊通過認證之後,該資訊本身是直白可見的,數字簽名只不過是負責檢驗有沒有被篡改過,相比之下,資訊被加密之後,是不可見的只能用匹配的金鑰進行解密。認證對於程式碼簽名已經足夠,沒必要將程式碼隱藏起來,但是涉及到個人資料的時候就需要加密了。
公共金鑰演算法比對稱金鑰演算法慢得多,我們可以配合AES使用。 過程: 1)我用隨機生成的AES金鑰對我將要傳送給我朋友的資訊進行加密生成訊息。 2)我用我朋友提供給我的公鑰對訊息進行加密。 3)我朋友拿到我的訊息後用自己的私鑰進行解密。 4)我朋友用AES金鑰對私鑰解密後的資訊進行解密。最後拿到真正的內容。

4.程式碼示例

    https://github.com/1789304191/rsa-test