zoukankan      html  css  js  c++  java
  • 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”

  • 相关阅读:
    HDU 5585 Numbers
    HDU 3308 LCIS
    POJ 2991 Crane
    POJ 1436 Horizontally Visible Segments
    POJ 3667 Hotel
    HaiHongOJ 1003 God Wang
    【SDOI 2008】 递归数列
    5月19日省中提高组题解
    【HDU 1588】 Gauss Fibonacci
    【POJ 3233】Matrix Power Series
  • 原文地址:https://www.cnblogs.com/huangming-zzz/p/10577490.html
Copyright © 2011-2022 走看看