這次人在老家寫文,熱到不能思考 XD,今天開始踏進密碼學的領域!
這邊指的不是加密貨幣,密碼學的全名為 Cryptography,一般來說可以分為兩種:
古典密碼學大部分是使用替換或是移項的方式來加密,大致上也可以分為幾類:
單表替換加密通常是明文與密文可以一對一 mapping,所以像凱薩密碼(Caesar)也屬於單表替換加密的類型。
凱薩密碼應該很多人剛開始學程式的時候都寫過 XD,原理也相當容易理解,就是設一個偏移量 n,然後將明文依據字母順序移動 n 位,就可以算出密文。
假設我們將 n 設為 3,對照表如下:
A | B | C | ... | X | Y | Z |
---|---|---|---|---|---|---|
D | E | F | ... | A | B | C |
這種方式除了可以用暴力破解,也能用詞頻分析的方式來破解。
相對於單表只用一個表來對應,多表就是用了多個表來對應,乍聽之下可能很抽象,我們實際看一個例子:維吉尼亞密碼
Credit: https://commons.wikimedia.org/wiki/File:Vigen%C3%A8re_square.svg
假設我們的明文是 HELLO WORLD!
,並且 key 是 ITHOME
,那麼怎麼得出密文呢?
首先如果 key 比明文還要長,我們需要先把 key 給 padding 到和明文一樣的長度:
明文 | H | E | L | L | O | W | O | R | L | D |
---|---|---|---|---|---|---|---|---|---|---|
KEY | I | T | H | O | M | E | I | T | H | O |
依據明文和 key,我們就可以到上面的表對照出密文:
明文 | H | E | L | L | O | W | O | R | L | D |
---|---|---|---|---|---|---|---|---|---|---|
KEY | I | T | H | O | M | E | I | T | H | O |
密文 | P | X | S | Z | A | A | W | K | S | R |
因此可得密文就是 PXSZA AWKSR!
,一般標點符號和空格都不管它 XD。
可以看見 O
和 W
都是對應到 A
,所以詞頻分析就不管用了。
今天回老家時間好少 XD,沒有足夠的時間可以更深入研究,不過後續幾天應該都還是會寫 Crypto,希望可以涵蓋到多一點東西!