尝试四方密码

利用下面提供的工具来加密或解密消息:

加密

结果:

解密

结果:

生成的矩阵

历史中的精彩时刻

四方密码:历史背景和加密原理

四方密码是一种由法国人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."

中文翻译:
"显然,颠倒法从保密的角度来看没有任何安全性,用这种方法写的消息经不起稍微认真一点的检查。"