對稱加密

上一篇我們講到關於哈希演算法,一串字元串哈希之後,我們會完全看不出原文的信息。這個性質很有用,但我們無法實現加密通訊,因為連加密通訊應該接受到信息的人,也看不懂。

比如我們要給一個人發送一段話「今晚還是小樹林見」,我們sha256運算後是:2e2097b9caae882f32966a4d2469561fa70793e0cc3ba32a421a27fcd1bb3fa0

OK,消息被人截獲了是不擔心別人看懂,問題是接受消息的人也看不懂了。

這個時候我們可以用對稱加密演算法來實現加密通訊。原理很簡單,假設我們要給你發送一個信息hello,然後我們約定所有的字母都往字母表後一位來表示。h的後面是i,e的後一位是f,l的後一位是m,o的後一位是p。那我想發送hello的時候,每個字母往後一位替代,得到並發送字元串ifmmp。

這個ifmmp不是一個有意義的單詞,接受方因為知道我們的約定,把每個字母往前一位,就能還原出hello。我們把hello稱為「明文」,往後一位的過程叫「加密」,往後挪一位,而不是三位或者五位,這個數量當做「密鑰」,加密後的ifmmp叫「密文」,往前一位還原叫「解密」,解密完後又變成hello,也就是變回「明文」。

這個密鑰就像一把鑰匙,只知道往後挪是不夠解密的,還需要知道往後挪幾位。這個很重要,因為我們不可能為所有場景單獨設計一套加密演算法,演算法的安全性恰恰建立在它是公開的,沒有人能夠攻破的基礎上。加密的演算法都是公開的,你要保證你的信息不被人竊取,能夠保密的就是密鑰。

也就是說,大家都知道解密就是字母往前挪,但不知道要挪幾位。這樣就能形成保密。

不知道要挪幾位?試最多25次不就知道了嘛,所以這個加密演算法太簡單,不可能實用。

好在還有很多加密演算法可以用,比如我們舉例用的DES演算法(太古老了不推薦實際用,僅舉例用)。

from Crypto.Cipher import DESndes = DES.new(11223344, DES.MODE_ECB)ntext = 今晚還是小樹林見ncipher_text = des.encrypt(text)ncipher_textn

這裡的11223344就是密鑰,相當於往後挪幾位的位數,只有你和你要通訊的雙方知道。我們要發送的秘密消息是「今晚還是小樹林見」

這裡cipher_text完全是看不懂的密文,被人中途截獲了也問題不大。

接收方是知道密鑰11223344的,也知道我們用了DES演算法,所以就可以解密了。

plain_text=des.decrypt(cipher_text)nprint plain_textn

這樣信息就還原了。

如果你覺得微信溝通不安全,所有的信息都會被騰訊看見。那麼可以和你的朋友約定一個密鑰,然後每次發送信息的時候都加密一下,密鑰不要告訴別人,只告訴你那個很特殊的「朋友」。然後他再拿著個密鑰解密一下。

這樣騰訊只能看到你發送了一個3U4xa5xa3x84.xb1x81611xc4x19x8cxedxd96Yx87ox06x0cI

過去,莫名其妙不知道是什麼黑話。

而TA則能看到準確的消息「今晚還是小樹林見」。

推薦閱讀:

專家教你利用深度學習檢測惡意代碼
Tor的內鬥竟是因為他?

TAG:加密解密 | 信息安全 |