嘗試四方密碼
利用下面提供的工貝來加密或解密消息:
加密
解密
生成的矩陣
歷史中的精彩時刻
四方密碼:歷史背景和加密原理
四方密碼是一種由法國人Félix Delastelle(1840-1902)發明的對稱加密方法,屬於現代密碼學的一部分。此加密方法使用四個5×5矩陣加密字母對,每個矩陣包含25個字母。通常,字母Q被省略,或者I和J被視為同一個字母。或者,可以使用6×6矩陣來包括10個數字。
在加密過程中,會選擇兩個英文單詞作為密鑰,例如“example”和“keyword”。在去除重複字母後,將剩餘的字母按順序放入矩陣。這兩個矩陣分別放置在右上角和左下角,而左上角和右下角使用從A到Z的順序形成矩陣,構成四方密碼矩陣。
為了加密消息,將字母分成對,例如“hello world”變成“he ll ow or ld”。根據矩陣中的位置,找到相應的加密字母。例如,“he”的加密過程涉及在左上矩陣中找到“h”的位置和在右下矩陣中找到“e”的位置。然後,在右上矩陣中找到與“h”在同一行且與“e”在同一列的字母,在左下矩陣中找到與“h”在同一列且與“e”在同一行的字母。這兩個字母組成加密的密文。
四方密碼的弱點在於當兩個字母在同一列時,使用原始字母,這可能暴露約20%的內容。此外,由於它是一種對稱加密方法,很易經由記錄的比較來破解,導致安全性低。另一個問題是它只能加密偶數個字符。如果字符數是奇數,最後剩下的字符無法加密,使用原始字符或填充加密會使密文更容易暴露。
作為經典密碼學的一部分,儘管四方密碼不如現代加密算法安全,但其簡單性和歷史意義為現代加密方法提供了靈感。
四方密碼加密逐步指南
以下是使用四方密碼的詳細加密指南,關鍵詞為"Four"和"Cipher",明文為"Hello World"。
步驟1:準備
- 選擇關鍵詞
- key1 = "Four"
- key2 = "Cipher"
- 準備明文
- 明文為"Hello World"。
- 將明文轉換為適合加密的格式
- 轉換為大寫字母並將字母J替換為I:Hello World -> HELLOWORLD
- 移除非字母字符:HELLOWORLD
- 如果明文長度為奇數,在末尾填充X字符。
步驟2:生成字母方格
使用關鍵詞生成四個5x5字母方格。字母表通常省略J,使用I代替。
生成字母方格的函數
function createSquare(keyword) {
let alphabet = "ABCDEFGHIKLMNOPQRSTUVWXYZ";
let used = {};
let square = "";
keyword = keyword.toUpperCase().replace(/J/g, 'I');
for (let i = 0; i < keyword.length; i++) {
if (!used[keyword[i]]) {
(used[keyword[i]]) = true;
square += keyword[i];
}
}
for (let i = 0; i < alphabet.length; i++) {
if (!used[alphabet[i]]) {
square += alphabet[i];
}
}
return square;
}
生成四個字母方格
方格1 (square1) 和 方格4 (square4) 使用 key1 = "FOUR":
F O U R A
B C D E G
H I K L M
N P Q S T
V W X Y Z
方格2 (square2) 和 方格3 (square3) 使用 key2 = "CIPHER":
C I P H E
R A B D F
G K L M N
O Q S T U
V W X Y Z
步驟3:加密過程
將明文分成字母對並加密每一對。例如,明文:HELLOWORLD。
分割明文
HELLOWORLD -> HE LL OW OR LD
加密每一對字母
使用以下函數找到字母在方格中的位置:
function findPosition(square, char) {
let index = square.indexOf(char);
let row = Math.floor(index / 5);
let col = index % 5;
return [row, col];
}
逐步加密每一對字母:
- 加密字母對 "HE"
- H 在方格1中的位置是 (2, 0)
- E 在方格4中的位置是 (1, 3)
- 從方格2的 (2, 3) 位置取字母 -> M
- 從方格3的 (1, 0) 位置取字母 -> R
- 結果:HE -> MR
- 加密字母對 "LL"
- L 在方格1中的位置是 (2, 3)
- L 在方格4中的位置是 (2, 3)
- 從方格2的 (2, 3) 位置取字母 -> M
- 從方格3的 (2, 3) 位置取字母 -> M
- 結果:LL -> MM
- 加密字母對 "OW"
- O 在方格1中的位置是 (0, 1)
- W 在方格4中的位置是 (4, 1)
- 從方格2的 (0, 1) 位置取字母 -> I
- 從方格3的 (4, 1) 位置取字母 -> W
- 結果:OW -> IW
- 加密字母對 "OR"
- O 在方格1中的位置是 (0, 1)
- R 在方格4中的位置是 (0, 3)
- 從方格2的 (0, 3) 位置取字母 -> H
- 從方格3的 (0, 1) 位置取字母 -> I
- 結果:OR -> HI
- 加密字母對 "LD"
- L 在方格1中的位置是 (2, 3)
- D 在方格4中的位置是 (1, 2)
- 從方格2的 (2, 2) 位置取字母 -> L
- 從方格3的 (1, 3) 位置取字母 -> D
- 結果:LD -> LD
最終密文
將加密的字母對組合在一起。HELLOWORLD 的密文是:MRMMIWHILD
四方密碼、雙重普萊菲爾密碼和普萊菲爾密碼的比較
相似之處
- 多字母替換密碼
- 四方密碼、雙重普萊菲爾密碼和普萊菲爾密碼都是多字母替換密碼。這意味著它們使用字母對或字母組作為加密和解密的基本單元,而不是單個字母。
- 字母矩陣
- 這三種密碼系統都使用字母矩陣進行加密和解密。每種方法都依賴於這些矩陣中字母的位置來執行替換或轉換。
- 目標
- 這些密碼的設計目標是通過增加加密的複雜性來增強傳統單字母替換密碼的安全性,從而防止簡單的頻率分析攻擊。
不同之處
四方密碼
- 字母矩陣: 使用四個5x5字母矩陣。
- 加密單元: 每次處理兩個字母。
- 步驟:
- 四個字母矩陣:兩個矩陣由關鍵詞生成,另外兩個通常按字母順序排列。
- 將明文分成字母對。
- 在兩個不同的矩陣中找到每對字母的位置,然後在另外兩個矩陣中找到對應的加密字母。
- 複雜性: 通過使用更多的矩陣增加了比普萊菲爾密碼更高的複雜性和安全性。
雙重普萊菲爾密碼
- 字母矩陣: 使用兩個5x5字母矩陣。
- 加密單元: 每次處理兩個字母。
- 步驟:
- 兩個字母矩陣由不同的關鍵詞生成。
- 將明文分成字母對。
- 使用第一個矩陣找到第一個字母的位置,使用第二個矩陣找到第二個字母的位置,然後根據規則替換字母。
- 複雜性: 比單一普萊菲爾密碼增加了一個矩陣,從而增加了複雜性和安全性。
普萊菲爾密碼
- 字母矩陣: 使用一個5x5字母矩陣。
- 加密單元: 每次處理兩個字母。
- 步驟:
- 一個字母矩陣由關鍵詞生成。
- 將明文分成字母對。
- 根據它們的位置關係(同一行、同一列或不同的行和列)替換字母。
- 複雜性: 比簡單的單字母替換密碼複雜,但比雙重普萊菲爾和四方密碼簡單。
比較表
特徵 | 四方密碼 | 雙重普萊菲爾密碼 | 普萊菲爾密碼 |
---|---|---|---|
字母矩陣數量 | 4 | 2 | 1 |
加密單元 | 每次兩個字母 | 每次兩個字母 | 每次兩個字母 |
關鍵詞 | 兩個關鍵詞 | 兩個關鍵詞 | 一個關鍵詞 |
複雜性 | 高 | 中 | 低 |
加密規則 | 使用四個矩陣進行替換 | 使用兩個矩陣進行替換 | 使用一個矩陣進行替換 |
換位法和替換法
Felix Delastelle 在Traité Élémentaire de Cryptographie中深入探討了密碼學中的換位法和替換法。換位法涉及改變明文中字母的位置以加密消息。例如,將字母順序顛倒,如 "Paul est parti pour Lyon" 變成 "NOYLRUOPITRAPTSELUAP"。另一種方法是分組,即將明文按預定的形狀排列,然後按照約定的順序提取字母形成密文。
法文原文:
"L'inversion consiste à transposer ou déplacer les lettres du texte clair suivant une méthode convenue entre les correspondants, de telle sorte qu'il soit facile aux initiés de rétablir l'ordre primitif."
中文翻譯:
"顛倒法是指按照通信雙方約定的方法轉移或移動明文的字母,以便使內行人員能夠輕鬆恢復原始順序。"
法文原文:
Le renversement s'effectue en écrivant les lettres du clair en sens inverse de l'ordre normal, la dernière lettre devenant la première, l'avant-dernière la seconde, l'antépénultième la troisième, etc. Exemple: "Paul est parti pour Lyon" s'écrira "NOYLRUOPITRAPTSELUAP". Le renversement peut s'appliquer soit au texte entier, soit successivement à chaque mot ou à des groupes d'un nombre de lettres convenu. La phrase ci-dessus, divisée en deux groupes de dix lettres, donnerait: "RAPTSELUAPNOYLRUOPIT". Et en quatre groupes de cinq lettres: "ELUAPRAPTSUOPITNOYLR".
中文翻譯:
顛倒法是通過將明文的字母按相反順序書寫來實現的,最後一個字母變成第一個,倒數第二個變成第二個,倒數第三個變成第三個,依此類推。例如:"Paul est parti pour Lyon" 會被寫成 "NOYLRUOPITRAPTSELUAP"。顛倒法可以應用於整個文本,也可以依次應用於每個單詞或按約定數量的字母分組。上述句子分成兩個十字母的組,會變成:"RAPTSELUAPNOYLRUOPIT"。而分成四個五字母的組,則會變成:"ELUAPRAPTSUOPITNOYLR"。
法文原文:
"De nombreux systèmes ont été imaginés dans ce but: 1 Renversement des lettres; 2 Groupements divers; 3 Carrés et grilles; 4 Méthodes diverses."
中文翻譯:
"為了這個目的,已經設計了許多系統:1 字母顛倒;2 各種分組;3 方陣和網格;4 各種方法。"
法文原文:
"Il est évident que le renversement ne donne aucune sécurité au point de vue du secret, les dépêches écrites dans ce système ne résistant pas à un examen un peu sérieux."
中文翻譯:
"顯然,顛倒法從保密的角度來看沒有任何安全性,用這種方法寫的消息經不起稍微認真一點的檢查。"