凱撒密碼以朱利葉斯·凱撒(Julius Caesar)(公元前 100 年至公元前 44 年)的名字命名,他將其用於秘密軍事通信。凱撒密碼是一種替代密碼。朱利葉斯·凱撒最初使用三移來加密和解密訊息。使用仿射函數進行加密:f(x)=x+b。
首先,將初始文字(要加密的訊息)的每個字元轉換為0 到25 之間的數字,對應於其在包含26 個字母的拉丁字母表中的位置--> (a = 0, b = 1 ... z = 25 )。
然後,透過仿射函數 (f(x) = 1x + b) 對獲得的每個數字進行變換。 「x」代表數字,「b」是在加密過程中定義的。 「b」是用來解密最終訊息的金鑰。
如果我們將所有圖像放入一個清單中,我們將獲得與初始文字的 n 個字元相對應的 n 個數字。下一步是找出每個數字的模 26 值。 (模表示餘數)
例:19 的模 4 為3 ,因為
19 = 4 * 4 + 3
另一方面,26 的模 26 為0 ,因為26 = 26 * 1 + 0
因此,我們得到一個包含 n 個元素的新列表,每個元素都包含在 0 到 25 之間。所有這些數字都使用下表轉換為拉丁字母。
我們最終透過將所有字母並排放置來創建最終訊息。
步驟 1 和 4 可以使用以下表格完成:
一個 | 乙 | C | D | 乙 | F | G | H | 我 | J | K | L | 中號 | 氮 | 氧 | 磷 | 問 | 右 | S | 時間 | U | V | 瓦 | X | 是 | Z |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 號 | 18 | 19 | 20 | 21 | 22 號 | 23 | 24 | 25 |
如果攻擊者知道訊息已使用凱撒密碼加密,他可以嘗試所有移位(b 值從 1 到 25)來解密訊息。這稱為暴力破解法。
我們也可以使用頻率分析來解密訊息,因為每個字母都使用相同的演算法加密,最常見的英語字母是:
使用上表, ATTACK可以寫為: 25 0 19 19 0 2 10 25每個數字的圖像:
新列表為: 29 4 23 23 4 6 14 29
使用模 26 方法,我們得到:
最終訊息是3 4 23 23 4 6 14 3並再次使用這些表,我們將它們轉換為加密訊息:
德克西戈德
ZATTACKZ使用函數x + 4加密並變成DEXXEGOD 。
使用上表, DEXXEGOD可以寫成: 3 4 23 23 4 6 14 3每個數字的圖像:
新列表為: -1 0 19 19 0 2 10 -1
使用模 26 方法,我們得到:
最終訊息是25 0 19 19 0 2 10 25並再次使用這些表,我們將它們轉換為加密訊息:
攻擊力
DEXXEGOD使用函數1x - 4解密並變成ZATTACKZ 。
這稱為暴力法。
使用上表, DEXXEGOD可以寫成: 3 4 23 23 4 6 14 3
a 是 0 到 25 之間的數字。
使用函數 f(x) = Mod(1x + a, 26) :
我們可以得到所有這些結果:
一個 | 解密文字 |
---|---|
1 | 飛哥 |
2 | 加哈吉格 |
3 | 希比克什 |
4 | 伊吉西吉利蒂 |
5 | 吉克德克穆吉 |
6 | 克萊恩克 |
7 | LMFF莫爾 |
8 | 米格尼帕克斯姆 |
9 | 諾霍欽 |
10 | 阿片類藥物 |
11 | pqjjqsap |
12 | qrkkrtbq |
13 | 糖糖 |
14 | 電視節目 |
15 | 通努韋特 |
16 | 烏沃夫克斯夫 |
17 號 | 病毒 |
18 | 嗚嗚嗚 |
19 | 西里耶克斯 |
20 | yzsszbjy |
21 | 札塔克茲 |
22 號 | 阿布卜德拉 |
23 | BCVVCemb |
24 | cdwwdfnc |
25 | 德克斯戈德 |
唯一有意義的文字是 zattackz,因此我們可以推斷出密鑰是 21 (25 - b = 21)。
DEXXEGOD使用函數f(x) = 1x - 4或f(x) = 1x + 21解密並變成ZATTACKZ 。
語言 | 加密 | 解密 |
---|---|---|
C | 凱撒.c | 即將推出 |
C# | 凱撒.cs | 即將推出 |
C++ | 主機程式 | 主機程式 |
JavaScript | 加密.js | 解密.js |
Python | 加密.py | 解密.py |
迅速 | Swift 函式庫 | Swift 函式庫 |
npm i @cryptoolsorg/caesarcipher