天天看點

《Python密碼學程式設計》——1.9 不用紙質工具做加密

本節書摘來自異步社群《python密碼學程式設計》一書中的第1章,第1.9節,作者 [美] al sweigart(斯維加特),李永倫 譯,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

在使用凱撒加密法做加密和解密時,加密輪盤和st. cyr滑條都是很好的工具。但我們隻用鉛筆和紙也可以實作凱撒加密法。

把字母表的字母從a到z寫下來,在每個字母下面寫下數字0到25。在a下面寫0,b下面寫1,如此類推,直到在z下面寫25(字母表裡有26個字母,但我們的數字最多隻到25,因為我們從0而不是1開始的)。最終看起來像這樣:

《Python密碼學程式設計》——1.9 不用紙質工具做加密

有了上面這個從字母到數字的代碼,我們就可以用數字來表示字母了。這是一個非常強大的概念,因為數學使用數字。現在我們可以在字母上做運算了。

現在,如果要加密,我們找到希望加密的字母下面的數字,然後把密鑰數字加上去。這個和就是加密的字母下面的數字。如,我們使用密鑰13加密“hello. how are you?”。首先,我們找到h下面的數字,是7。接着,我們把密鑰加上這個數字,7 + 13 = 20。數字20在字母u下面,這意味着字母h加密成字母u。如果要加密字母e,我們把e下面的4加上13,得到17。17上面的字母是r,是以e加密成r。如此類推。

直到我們遇上字母o時這個方法才會出問題。o下面的數字是14,當把14加上13時,我們得到27。但我們的數字清單最多隻到25。如果字母的數字和密鑰之和超過26,我們應該減去26,27 – 26得到1。數字1上面的字母是b。于是,當使用密鑰13時,字母o加密成字母b。一個接一個地,我們可以把“hello. how are you?”裡的字母加密成“uryyb. ubj ner lbh?”。

是以,加密一個字母的步驟是:

1.從1到25選一個密鑰。保管好這個密鑰!

2.找出明文字母的數字。

3.把密鑰加到這個明文字母的數字。

4.如果這個數字大于26,則減去26。

5.找出你計算的數字的字母。這就是密文字母。

6.對明文消息裡的每個字母重複步驟2~5。

表1-1示範了如何使用密鑰13加密“hello. how are you?”裡的每個字母。每列示範了把左邊的明文字母變成右邊的密文字母的步驟。

《Python密碼學程式設計》——1.9 不用紙質工具做加密
《Python密碼學程式設計》——1.9 不用紙質工具做加密

如果要解密,減去這個密鑰,而不是加上它。對于密文字母b,這個數字是1。1減去13得到−12。就像加密的“減去26”規則,當解密并且結果小于0時,我們有一條“加上26”的規則。−12 + 26是14,是以,如表1-2所示,密文字母b解密回字母o。

《Python密碼學程式設計》——1.9 不用紙質工具做加密
《Python密碼學程式設計》——1.9 不用紙質工具做加密

如你所見,使用凱撒加密法加密是并不真的需要加密輪盤。如果你記住數字和字母,你甚至不必寫下字母表以及它們下面的數字。你隻需心算就可以寫出秘密消息了。