playfair加密过程(密码学_古典密码学_多图加密算法)

Playfair

原理:多图替代 polygraphic substitution

一、密钥

密钥是一个5*5的矩阵,但是英文中有26个字母,谁的多余的呢?

——j是多余的 (‘j’渴望拥有姓名!)

如果明文中有‘j’,当成‘i’处理。谁让他俩长得这么像呢?

密钥的生成过程有点类似于key word算法密钥的生成过程

  1. 选定一个单词
  2. 去掉重复的字母和字母'j'
  3. 每行五个,把2.的结果排好
  4. 对于未使用的,按照字母表顺序每行五个排好

举个栗子:

  1. 选定单词"harpsichord"(一种乐器,大键琴)
  2. 去掉重复字母和字母'j':"harpsicod"
  3. 将2.的结果放到矩阵中
    • 第一行:H A R P S
    • 第二行:I C O D
  4. 未使用的字母:B E F GK L M N Q T U V W X Y Z接着3.填下去
    • 第二行:I C O D B
    • 第三行:E F G K L 注意,这里没有字母'J'!
    • 第四行:M N Q T U
    • 第五行:V W X Y Z

最后结果:

OU`$A1GE1KPLDWIOINQ%)KC

二、加密过程

多图加密算法是对明文进行按对加密的,

加密时,在密钥矩阵中,

先找到该明文字符对中两个字符的位置,

然后根据三个规则,确定好输出的密文对

1、三个加密规则

对于每个明文对,在密钥矩阵中的位置关系不过三种:

  • 只同行
    • 将会被它们右边的字符分别替代
    • 如果该字符在最右边一列,将会被同行 最左边一列的那个字符代替(其实就是“穿透”过去)
  • 只同列
    • 将会被它们下边的字母分别替代
    • 如果该字符在最下面一行,将会被同列 最上边一行的那个字符代替(其实就是“穿透”过去)
  • 既不同行也不同列
    • 如果两个明文对,既不同行也不同列,那么将它们连起来,记为明文链
    • 明文链就可以确定一个矩阵,它们的连线是该矩阵的对角线
    • 每个矩阵有两条对角线,另外一条记为密文链
    • 明文对将会被密文链上,和明文对同行的两个字母替代

显然,似乎应该有一个位置关系——同行同列,

如果明文对的两个字符是同行同列,是什么情况?——这说明这两个字符是相同的。

那么这三条规则则失效了,

其实,除了明文对为重复字母,这三条规则遇到一些情况也会失效:

  • 明文中有字母'j'
  • 如果明文是奇数个字母,那最后一个字母不就是单身狗了?
2、三个预处理

针对于上面的三个情况,“兵来将挡水来土掩”,我们需要对明文对进行三个预处理

在对明文正式进行加密之前,还需要对明文进行三个预处理:

  1. 将明文中的字母'j'替代成'i'
    • j:为什么总是我???
    • ——因为密钥矩阵中就没有‘j’啊!
  2. 将重复的字母中间加上特殊字母'q'
    • 如果是重复字母对,则
  3. 如果明文是奇数个字母,需要在最后加上特殊字母'q'
3、举个例子

使用我们刚刚生成的密钥矩阵,对“speciallity”进行加密

OU`$A1GE1KPLDWIOINQ%)KC

首先,对明文进行预处理:

  1. 明文中没有字母'j',无需处理
  2. 在两个’L‘之间加上'Q'
  3. 加上’Q‘之后,明文变成了偶数个
    • 注意,2.一定要在3.之前!
    • 如果我们反过来,明文对中有重复字母且为奇数个,那我们:
      • 现在最后加上无效字符'Q',明文变成了偶数个
      • 在重复字母中间加上特殊字符'Q',明文变成了奇数个
      • 再在最后加上特殊字符’Q‘,明文对变成了偶数个,但是最后两个自身重复了,还能再加上特殊字符’Q‘吗?——当然不行,那最后就有了三个’Q‘

经过预处理,明文变成了:SP EC IA LQ LI TY

  • (S,P)->(H,S)

    • 它们的位置关系是同行
    • S在最右侧,所以变成了第一列的同行字母'H'
    • P变成了右边的字母'S'
  • (E,C)->(F,I)

    • 它们既不同行也不同列
    • 明文链(E,C)(红色箭头所示)确定了矩阵(红色方框内):

    M{N4A3VG$OTZGF8BO73A$2

    • 矩阵中另一条对角线为密文链(F,I)(蓝色箭头所示)
  • (I,A)->(C,H)

  • (L,Q)->(G,U)

  • (L,I)->(E,B)

  • (T,Y)->(Y,P)

    • 这个关系是同列
    • 和(S,P)的变化过程很像

最后“speciallity”变成了“hsfichguebyp”

转载于:https://www.cnblogs.com/huangming-zzz/p/10577490.html

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您解答关于 Playfair 加密的问题。以下是一个 Playfair 加密的例子: 假设我们要加密的明文为 "HELLO WORLD",密钥为 "SECRETKEY"。 首先,将明文中的所有字母转换为大,去掉空格,得到 "HELLOWORLD"。 然后,根据密钥 "SECRETKEY" 构建 5x5 的矩阵,如下所示: S E C R T K Y A B D F G H I L M N O P Q U V W X Z 注意,字母 "J" 被排除在外,因为它在 Playfair 加密中与字母 "I" 共用一个格子。 接下来,将明文按照如下规则进行分组: - 如果有连续相同的字母,插入一个 "X"。 - 如果明文长度为奇数,在末尾添加一个 "X"。 按照这个规则,我们将 "HELLOWORLD" 分组为: "HE", "LX", "LO", "WO", "RL", "DX"。 然后,对每组进行加密: - 对于每组中的两个字母,查找它们在矩阵中的位置,分别为 (row1, col1) 和 (row2, col2)。 - 如果它们在同一行,将它们分别替换为该行中它们右侧的字母,如果它们在该行的最右侧,则替换为该行的最左侧的字母。 - 如果它们在同一列,将它们分别替换为该列中它们下方的字母,如果它们在该列的最底部,则替换为该列的最顶部的字母。 - 如果它们不在同一行也不在同一列,将它们替换为矩阵中它们所在行的另一列中的字母,具体方法是:将它们所在行的另一列中与它们垂直的字母作为密文。 按照这个规则,我们对每组进行加密,得到密文为 "DKFZCBZLPOOJ"。 最后,我们将密文按照固定长度进行分组,得到最终的加密结果。例如,如果我们将密文按照长度为 5 进行分组,则得到 "DKFZC", "BZLPO", "OJ"。 这就是 Playfair 加密加密过程。解密过程加密过程类似,但是要进行相反的替换操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值