RSA究竟是誰加密?

RSA究竟是誰加密?

RRSA加密是最經常使用的非對稱加密方式,原理是對一極大整數作因數分解的困難性來保證安全性。一般我的保存私鑰,公鑰是公開的(可能同時多人持有)。編程

但你必定會碰到過,兩個開發者爭執:究竟是由誰加密,誰解密?安全

看完這篇文章,你就會明白這一切。編程語言

規範怎麼說

咱們先來看看權威庫open_ssl的文檔描述,它定義了四個方法加密

  • RSA_private_decrypt
  • RSA_private_encrypt
  • RSA_public_decrypt
  • RSA_public_encrypt

image-20200506190524159.png
看起來彷佛私鑰和公鑰均可以用來進行加密解密?spa

可是仔細查看 RSA_public_decryptRSA_private_encrypt的描述都是:low level signature operationscode

點進詳細描述,咱們發現 RSA_public_decrypt 並無真正的去解密,而僅僅是對密文進行驗籤!!!blog

也就是說,對於私鑰加密內容,默認的標準包規範是隻支持 公鑰驗籤,並不支持公鑰解密的。支付寶

使用場景

根據以上結論,咱們知道規範默認是支持 公鑰加密,私鑰解密私鑰加密,公鑰驗籤ssl

可是咱們常常也會碰到私鑰加密,公鑰解密的狀況,究竟是怎麼回事?其實咱們使用RSA加密有常見的三種狀況:開發

  1. 公鑰加密,私鑰解密

    最經常使用的一種狀況,對接過支付寶就應該碰到過。

    接收方存一個私鑰,發送方保存對應的公鑰用來發送消息加密,可以確認消息不被泄露。

    因此支付寶會把他生成的一份公鑰給你, 你須要把你生成的公鑰給支付寶,大家的通訊是創建在兩對公私鑰之上的。

  2. 私鑰加密,公鑰驗籤

    發送者把原文和密文同時發佈,客戶端使用公鑰確認是由真正的發送者發出的。

    這種狀況通常用於確認消息發佈的真實性,可用於推送、廣播和公開消息驗證場景。

  3. 私鑰加密,公鑰解密

    這個自己不在推薦規範內的場景,如今倒是很常見。

    例如離線軟件受權,發佈出去的軟件裏面保存一個公鑰,軟件廠商使用私鑰加密包含到期時間的原文,獲得密文,也就是受權碼,軟件驗證的時候使用公鑰解密受權碼,對比當前時間,確認是否過時。

因爲標準包裏面並不支持公鑰解密,像Golang這種的標準庫裏面僅僅按照標準包實現的語言,使用公鑰解密方法的時候,就須要用到第三方庫,或者本身hack。 可是對於老牌的編程語言 C, Java ,PHP 之類的,在標準包內就提供了公鑰解密方法。

總結

因此咱們能發現,RSA加密方式,並非必定由誰加密,由誰解密。

而是得根據你的使用場景來定,至於公鑰和私鑰,其實在數學的概念上是同樣的,都是能互相解密的,只是咱們根據是公開,仍是保存在本身手裏來區分。公佈出去,不怕泄露的就是公鑰,保存在本身手裏的就是私鑰。

看完這篇文章,若是你以爲對你有幫助,請幫我點個贊。

若是文章有錯漏之處,歡迎指出。

相關文章
相關標籤/搜索