RSA 私鑰和公鑰的一些自己的理解

原文地址: http://blog.csdn.net/rodulf/article/details/50689079


RSA 是非對稱加密算法

對稱的加密算法,加密和解密都是使用的一套密鑰,而非對稱使用的是兩套密鑰。

例如我要傳的是18,然後我加密的時候是3*6,然後能我解密的時候,可能是(3*3)*(6/3)=9*2=18 來得到這個18.
我加密的時候是一種密鑰,
解密的時候又是一種密鑰。



1:加密的密鑰與解密的密鑰不相同 
2:   使用私鑰加密的內容,只能通過公鑰來解密
      使用公鑰加密的內容,只能通過私鑰來解密

3:公鑰,可以對外給任何人的加密和解密密碼,公開的,可以任何人訪問

4:私鑰,私鑰是一定要嚴格保護的,通過私鑰可以生成公鑰,但是從公鑰可以認爲是永遠無法推導出私鑰的。

問題:私鑰可以生成公鑰,但是公鑰不能生成私鑰。那麼支付寶裏面放了私鑰合理嗎?


-------------------------------------------------------------------------------------------------------------------------

1: 基於公開密鑰的加密過程

-------------------------------------------------------------------------------------------------------------------------

  比如有兩個用戶CEO財務CEO想把一段明文通過雙鑰加密的技術發送給財務財務有一對公鑰和私鑰,那麼加密解密的過程如下:

  1. 財務將他的公開密鑰傳送給Alice。(或者CEO從公司的服務器獲取公開密鑰
  2. CEO財務的公開密鑰加密她的消息,然後傳送給財務
  3. 財務用他的私人密鑰解密CEO的消息。

  上面的過程可以用下圖表示,CEO使用財務的公鑰進行加密,財務用自己的私鑰進行解密。

------------------------------------------------------------------------------------------------------------------------- 

2:基於公開密鑰的認證過程

-------------------------------------------------------------------------------------------------------------------------

  身份認證和加密就不同了,主要用戶鑑別用戶的真僞。這裏我們只要能夠鑑別一個用戶的私鑰是正確的,就可以鑑別這個用戶的真僞。

   還是CEO財務這兩個用戶,CEO想讓財務知道自己是真實的CEO,而不是假冒的,因此CEO只要使用私鑰公鑰密碼對文件簽名發送 給財務財務使用CEO的公鑰對文件進行解密,如果可以解密成功,則證明財務的私鑰是正確的,因而就完成了對財務的身份鑑別。整個身 份認證的過程如下:

  1. CEO用她的私人密鑰對文件加密,從而對文件簽名。
  2. CEO將簽名的文件傳送給財務
  3. 財務CEO的公鑰解密文件,從而驗證簽名。



----------------------------------------

公鑰可以分享給任何人的,例如github 上面就是需要我們上傳公鑰的。

項目中使用到密鑰的案例:
案例一:

GitHub的公鑰的生成:






--------------------------------------------------------------------------------------------------------------------------------------

http://bbs.csdn.net/topics/390599148

剛接觸Git有很多困惑
1.爲什麼要公鑰和私鑰呢,到底有啥用呢(詳細點)
2.爲什麼要把我的公鑰加到Git項目之中保存起來
3.比如,某路人甲 想給我的項目提供一些代碼,他沒有我的公鑰可以push給我嗎?


2. GIT服務器上存儲的是公鑰,你本地存儲的是私鑰,當你push本地代碼庫到遠程代碼庫,服務器會要求你出示私鑰,並且用你出示的私鑰和它的公鑰配對來完成認證。由於使用的是不對稱加密,所以公鑰可以公開,只要保管好私鑰就可以。
3. 路人甲只要沒有私鑰,所以無法push。這樣才能保證開源項目的完整性,否則阿貓阿狗都去push代碼,那項目不就亂套了?如果路人甲想對你的項目做出貢獻,那麼以GITHUB爲例,他會發送一個pull request給你,然後由你來審覈他作出的改變,如果審覈通過,那麼你就可以將他的pull request合併到你工程的某一分支中。這裏只以GITHUB爲例,私有的GIT服務器可能沒有類似功能,比如GITLAB就沒有pull request。

--------------------------------------------------------------------------------------------------------------------------------------


-------------------------------------

案例二:


支付寶有兩種模式:
一種就是demo裏面(demo 只是給我們看怎麼弄的),本地支付,但是不安全,
客戶端生成Order -> 使用私鑰進行簽名-》payInfo-》支付寶服務器使用商戶的公鑰進行校驗
一種是通過自己的服務器進行簽名:
客戶端生成order -》提交給服務器-》服務器計算金額,orderInfo-》通過私鑰生成簽名sign-》pageInfo-》回來給客戶端客戶端再將這個信息給支付寶


支付寶也需要用到公鑰,私鑰,我們的項目裏面填寫私鑰就好了,支付寶那邊已經有了公鑰了





公鑰,上傳給服務器,服務器就認可這臺電腦私鑰加密的東西。
在PayDemoActivity:裏面有。下面的幾個是公司給的或者是你幫公司申請的。
// 商戶PID
public static final String PARTNER = "2088601082136243";
// 商戶收款賬號
public static final String SELLER = "[email protected]";
// 商戶私鑰,pkcs8格式
// 客戶端使用的私鑰,對於請求進行數字簽名,傳給服務器,服務器使用公鑰進行驗證
public static final String RSA_PRIVATE = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAM62H9NVaAFL54uyqjNv11J7eeOsh/xRQ2c31zUXGmFvuq5iUVxahQBNKa5O3w4qoOdzCt6yw+Fcl9hN/9NV9pWiCUBzNBluUMyqTb2Qs+bULisevBk810Uevo/Cct+gu+6e2tTal2dXszAXK7tYjJqd5Rzmc/qJRzFPNn4j3W2NAgMBAAECgYEAwEDBHtPrNHF9O/+Cru5RLGSs++SmYTTPZLuZy8XeAkthK/lDRIrn8lzR7E1sxYc+OaVUscU/y2VL0KDS06K6/8gVCcJe4UiCjIBXyhmwNBKBHf4jlKKAlaWZkPwJSxpfE1O16epBvTHZdyEY0ALfMnvQlUZ8RAAXo5DHGutHscECQQD++08BYfWDhYVpDzlEcPM+9fyecen8vGiX/T0+LB88kREIldjiQmqJyBvKECRBUJYg+2mqHGQjQMfBHfaaUsC9AkEAz4l27Qps5e93EmNlDn3RsMH+JVzMu0442nA8SbpRJOtmuqYDZAH7W2uj3J3J1gIbZg5zCxQc9rLDYcq2wo21EQJBAK1x/ZgPLpa8qLeCZ44q1wwpACI3ktccwnlBBfvYv5bPhyqz48hlLVt0B5M3z7GuQ7FD0+inT2a7liXDYBAx4nECQD8SSsc9LN0wSmKXPGYMDMcIHcGjE0E1Q4f3JgtOCU0MEVtWCp/BDm+5JcJtXaKhX0xDxeivAyJiL4ivv50ezdECQHptoOYG0tMCHL0oOXrZXsdpAFL/c8vX25Oq/uaYaR+Zgv02ipt+81YQ+8nYTwD55TZytt0TcifqUQhDf0y7XyQ=";
// 支付寶公鑰
public static final String RSA_PUBLIC = "";
發佈了104 篇原創文章 · 獲贊 71 · 訪問量 52萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章