1. 程式人生 > >最簡單易懂的非對稱加密

最簡單易懂的非對稱加密

        北京的張三發了一個快遞到廣州的李四,途中經過了上海,上海快遞中心出現了一個黑客老王,他偷偷打開了張三給李四的快遞,然後偷偷把裡邊的衣服剪爛,再按照原樣包裝好發往廣州,可以看到對於這樣簡單包裝的傳輸在中途是可以偷偷修改裡邊的東西。
        HTTP的資料包是明文傳輸,也即是如果中途某個黑客嗅探到這個HTTP包,他可以偷偷修改裡邊包的內容,至於張三跟李四是互相不知道這個動作的,因此我們必須要有一個方案來防止這種不安全的篡改行為,有個方法就是加密!

非對稱加密

        張三將衣服放到一個保險箱裡邊鎖起來,他打了個電話告訴李四保險箱開櫃密碼是1234,而黑客老王不知道密碼,所以他看不到保險箱裡邊的東西,李四收到快遞後用預先溝通好的密碼就可以開啟保險箱了。
        這裡保護的手段就是張三對物品進行加密,同時給了告訴李四解密的方法!

        那如果現在要求張三的密碼只能通過快遞傳給李四呢?如果張三直接傳密碼給李四,老王如果嗅探到這個快遞,那老王也知道密碼了,這就無法保護快遞的安全性了。因此還需要有個方案,讓張三能夠告訴李四密碼的同時,老王又無法檢視到張三跟李四通訊的資料。

    非對稱加密在這個時候就發揮作用了,來看看怎麼回事:張三擁有兩把鑰匙,一把叫做公鑰,一把叫做私鑰。公鑰是公開讓全社會都知道,沒關係,張三告訴所有人,你們要傳遞資料給我的時候請先用這個金鑰(公鑰)去加密一下你們的資料,加密後的資料只能通過張三私自藏著的私鑰才能解密。

    回到剛剛例子,張三先發給保險櫃(張三公鑰)給李四,接著李四把自己的保險櫃(李四公鑰)放到張三的保險櫃(即使用張三的公鑰加密李四的公鑰)裡邊發還給張三,接著張三拿到李四的資料包後,用自己的私鑰解開了外層保險櫃(張三的公鑰),拿到了裡邊李四保險櫃(李四的公鑰)。此時李四跟張三都有了各自的公鑰(並且都有他們自己的私鑰),接著只要保證每次互相傳遞資料的時候,把資料放在對方的保險櫃裡邊即可(即每次都用對方的公鑰加密資料),這樣無論如何,老王都無法解開保險櫃(因為只有各自的私鑰才能解開各自的保險櫃)。