• 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”

  • 相关阅读:
    FuelPHP 系列(三) ------ Model 模型
    FuelPHP 系列(二) ------ route 路由
    FuelPHP 系列(一) ------ Oil 命令
    微信小程序初探
    基于 Laravel 的 文件管理
    laravel(一)
    Git从零开始(三)
    Git从零开始(二)
    Git从零开始(一)
    Linux服务器学习(二)
  • 原文地址:https://www.cnblogs.com/huangming-zzz/p/10577490.html
Copyright © 2020-2023  润新知