网工干货知识

超全学习笔记
当前位置:首页 > 干货知识

密码学中的双字母加密方式

更新时间:2026年03月27日   作者:spoto   标签(Tag):

这种加密技术被认为比其他替换算法更为安全。其原理是将消息分解为两个独立的流,然后再将它们重新组合在一起。这种技术结合了Polybius方阵、字符置换以及分片加密的方法,从而实现信息的加密。这种加密技术是由Felin Delastelle发明的。不过,目前只有业余密码学家才会使用这种技术。

加密算法:

对于这种加密算法,我们使用了一个由25个字母构成的“密钥表”。

例如:

1   2   3   4   5  1  R   A   N   C   H  2  O   B   D   E   F  3  G   I   K   L   M  4  P   Q   S   T   U  5  V   W   X   Y  Z

在这里,我们将“J”与“I”合并在一起了。因为我们使用的是5×5的方形密钥矩阵,所以实际上只能使用26个字符中的25个来构成字符串。以“RAMSWARUP是NIT CALICUT的学生”作为我们的明文吧。

步骤1:

现在,需要在密钥矩阵中找到明文中的每个字母,并将对应的行号和列号分别写在两条独立的行上。例如,我们的第一个字母是“R”,它位于第一行和第一列的位置,因此对应的密钥密文值为“1-1”。

拉姆斯瓦鲁普是NIT卡利库特分校的学生。行数:113451144 34 412 4442214 22 412 134 1133144  列数:125322151 23 454 3453434 15 454 324 4242454

步骤2:

现在,需要选择一个特定的大小(这被称为“周期”),以表示我们将选取多少个关键值。例如,在这个例子中,选择块的大小为5。因此,需要将周期内的各个值进行划分,使得每个块包含5个值。

行:11345   11443   44124  44221  42241   21341  13314  4COL:12532 21512 34543 45343 41545 43244 24245 4

步骤3:

现在,需要合并行和列的值。先列出行的值,然后再列出列的值。在合并了行和列的值之后,最终得到的是合并后的数值。

1134512532 1144321512 4412434543 4422145343 4224141545 2134143244 1331424245 44

步骤4(最后一步):

现在,从最终合并得到的值中选择一对值,然后从键矩阵中提取相应的字符值。其中,第一个值表示行号,第二个值表示列号。例如,第一个被选取的值是11,它对应字符“R”;而第二个被选取的值是34,它则对应字符“L”。

密码文本:RLVFIRTIHATASUSTBCXSQECHUOLCITNGQQUT

示例:

让我们来看一个使用Bifid密码的Python示例,并附上详细的解释和输出结果。

Python
# 用于创建Polybius正方形的函数def 创建多边形方阵():    字母表 = “ABCDEFGHIKLMNOPQRSTUVWXYZ”  # 方格中没有任何“J”这个字母。    波利比乌斯正方形 = [列表(字母表[i:i+5]) 为了 i in 范围/区间(0, 25, 5)]    返回 波利比乌斯正方形# 使用Bifid密码对明文进行加密的函数def 双因素加密(明文, 波利比乌斯正方形):    明文 = 明文.上面().替换(“J”, “我”)  # 将字符转换为大写,并将‘J’替换为‘I’    加密后的数字 = []    为了 字符/字母 in 明文:        if 字符/字母 == “”:  # 忽略空格            继续        行/列, col = 查找位置/确定位置(字符/字母, 波利比乌斯正方形)        加密后的数字.附加(行/列)        加密后的数字.附加(科尔)    加密后的数字组合 = [str(数字/数值) 为了 数字/数值 in 加密后的数字]    加密后的数字字符串 = "".加入(加密后的数字组合)    返回 双歧重组(加密后的数字字符串)# 用于查找字符在Polybius正方形中位置的函数def 查找位置/确定位置(字符/字母, 波利比乌斯正方形):    为了 行索引, 行/列 in 列举(波利比乌斯正方形):        if 字符/字母 in 行/列:            col_idx = 行/列.指数(字符/字母)            返回 行索引 + 1, col_idx + 1    提高/提升 ValueError(f“字符”{字符/字母}“在波利比乌斯广场上找不到它。”)# 用于重新排列Bifid密码中加密后的数字的函数def 双歧重组(加密后的数字字符串):    半长 = 长度(加密后的数字字符串) // 2    行数 = 加密后的数字字符串[:半长度]    col_nums = 加密后的数字字符串[半长:]    组合的数字 = [行/列 + col 为了 行/列, col in zip(行数, col_nums)]    返回 "".加入(组合的数字)# 使用示例if __name__ == __main__:    波利比乌斯正方形 = 创建Polybius正方形()    明文 = “你好,世界”    加密后的文本 = 双因素加密(明文, 波利比乌斯正方形)    打印(“原始消息:”, 明文)    打印(“加密消息:”, 加密后的文本)

说明:

  1. “那个”创建Polybius正方形()该函数将Polybius方阵转换为一个5x5的网格结构,其中字母“J”被省略了(因为在这种密码体系中,字母I和J是合并在一起的)。
  2. “The”bifid_encrypt()函数该函数以明文和Polybius方阵作为输入。它首先将明文转换为大写形式,并将字母“J”替换为“I”。接着,它找出Polybius方阵中每个字母所在的位置,然后将这些位置组合起来,从而生成加密后的数字。
  3. “The”find_position()’该函数用于找出给定字符在Polybius方格中的行号和列号。
  4. “那个”bifid_rearrange()’该函数会重新整理这些加密后的数字,从而生成最终的密文。

输出:

原始消息:你好,世界。
加密消息:313423442531133353314

在这个例子中,明文“HELLO WORLD”通过Bifid密码算法进行加密,最终得到的密文为“313423442531133353314”。要解密这个密文,接收者需要反向操作:将数字分成行和列,然后查找Polybius方格中对应的字母。

              马上抢免费试听资格
意向课程:*必选
姓名:*必填
联系方式:*必填
QQ:
思博SPOTO在线咨询

相关资讯

即刻预约

免费试听-咨询课程-获取免费资料