古典密码(单表密码,维吉尼亚密码,普莱费尔密码,一次一密)

古典密码

1.单表密码(仿射加密)

仿射加密变化是:y=ax+b

算法:

仿射密码是一种表单代换密码,字母表的每个字母相应的值使用一个简单的数学函数对应一个数值,再把对应数值转换成字母。

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

加密:

请添加图片描述

解码:

请添加图片描述

其中:

请添加图片描述

注:在公式中如果K=1 ,b=3则为凯撒密码

仿射加密要求gcd(k,26)=1,即k与26互素。故密钥空间为12X26=312

扫描二维码关注公众号,回复: 13237653 查看本文章

与26互素的k的12个取值:
K K − 1 1 1 3 9 5 21 7 15 9 3 11 19 15 7 17 23 19 11 21 5 23 17 25 25 \begin{array}{|c|c|} \hline K&K^-1\\ \hline 1&1\\ \hline 3&9\\ \hline 5&21\\ \hline 7&15\\ \hline 9&3\\ \hline 11&19\\ \hline 15&7\\ \hline 17&23\\ \hline 19&11\\ \hline 21&5\\ \hline 23&17\\ \hline 25&25\\ \hline \end{array} K1357911151719212325K11921153197231151725

例子:

设k=(7,3) 7的逆为15,加密函数是y=7x+3(mod26),相应的解密函数是x=15(y-3)(mod26)=15y-19(mod26)。

若要加密的明文:china,首先将字母c,h,i,n,a转化为数字2,7,8,13,0;然后加密;
7 × ∣ 2 7 8 13 0 ∣ + ∣ 3 3 3 3 3 ∣ = ∣ 17 52 59 94 3 ∣ m o d 26 = ∣ 17 0 7 16 3 ∣ = ∣ R A H Q D ∣ 7\times \begin{vmatrix} 2 \\ 7\\ 8\\ 13\\ 0\\ \end{vmatrix}+ \begin{vmatrix} 3 \\ 3\\ 3\\ 3\\ 3\\ \end{vmatrix}=\begin{vmatrix} 17 \\ 52\\ 59\\ 94\\ 3\\ \end{vmatrix}mod26=\begin{vmatrix} 17 \\ 0\\ 7\\ 16\\ 3\\ \end{vmatrix}=\begin{vmatrix} R\\ A\\ H\\ Q\\ D\\ \end{vmatrix} 7×278130+33333=175259943mod26=1707163=RAHQD
即在当前密钥下,china经过仿射加密变化为RAHQD

解码:
15 × ∣ 17 0 7 16 3 ∣ − ∣ 19 19 19 19 19 ∣ = ∣ 236 − 19 86 221 26 ∣ m o d 26 = ∣ 2 7 8 13 0 ∣ = ∣ C H I N A ∣ 15\times \begin{vmatrix} 17 \\ 0\\ 7\\ 16\\ 3\\ \end{vmatrix}- \begin{vmatrix} 19\\ 19\\ 19\\ 19\\ 19\\ \end{vmatrix}=\begin{vmatrix} 236 \\ -19\\ 86\\ 221\\ 26\\ \end{vmatrix}mod26=\begin{vmatrix} 2 \\ 7\\ 8\\ 13\\ 0\\ \end{vmatrix}=\begin{vmatrix} C\\ H\\ I\\ N\\ A\\ \end{vmatrix} 15×17071631919191919=236198622126mod26=278130=CHINA
可见,原始消息china以及恢复

验证:
请添加图片描述

2.vigenere密码(维吉尼亚密码)

维吉尼亚密码是一种简单的多表代换密码。在这里,我们假设数字0-25代表按字母顺序排列的英语字母,即从a到z ,并且Key字符串的字母也以相同的方式考虑

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

加密过程:

  • 反复重复键串的字母(即密钥),直到其长度等于要加密的长度为止。

    例如:
    要 加 密 的 文 本 a b c d e f 密 钥 b c b c b c \begin{array}{|ccccccc|} \hline 要加密的文本&a&b&c&d&e&f\\ \hline 密钥&b&c&b&c&b&c\\ \hline \end{array} abbccbdcebfc

  • 因此加密算法为

请添加图片描述

解码过程:

  • 算法为

请添加图片描述

例子:

要加密内容为 a b c d e f

密钥为b c

加密过程:

对应的加密文本与密钥
要 加 密 的 文 本 a b c d e f 密 钥 b c b c b c \begin{array}{|ccccccc|} \hline 要加密的文本&a&b&c&d&e&f\\ \hline 密钥&b&c&b&c&b&c\\ \hline \end{array} abbccbdcebfc

c[a,b]=(a+b)mod26
      =(0+1)mod26
      =1
      =b

加密后是:b d d f f h

解密过程:
要 解 密 的 密 文 b d d f f h 密 钥 b c b c b c \begin{array}{|ccccccc|} \hline 要解密的密文&b&d&d&f&f&h\\ \hline 密钥&b&c&b&c&b&c\\ \hline \end{array} bbdcdbfcfbhc

p[b,b]=(b-b)mod26
      =0mod26
      =0
      =a

验证:

请添加图片描述

3.playfair密码(普莱费尔密码)

Playfair加密算法是先将明文按两个字母一组进行分组,然后在矩阵中找对应的密文。

1.建立密钥

Playfair算法基于一个5*5的字母矩阵,该矩阵使用一个关键词构造,方法是按从左到右、从上到下顺序,填入关键词的字母(去除重复字母)后,将字母表其作余字母填入。

例如:

请添加图片描述

取密文的规则如下:

  1. 若明文出现相同字母在一组,则在重复的明文字母中插入一个填充字母(eg:X)进行分隔后重新分组(eg: balloon被重新分组为ba lX lo on)

  2. 若分组到最后一组时只有一个字母,则补充字母X

  3. 若明文字母在矩阵中同行,则循环取其右边下一个字母为密文(矩阵最右边的下一个是最左边的第一个)(eg: ar被加密为RM)

  4. 若明文字母在矩阵中同列,则循环取其下边下一个字母为密文(矩阵最下边的下一个是最上边的第一个)(eg: mu被加密为CM)

  5. 若明文字母在矩阵中不同行不同列,则取其同行且与同组另一字母同列的字母为密文(eg: hs被加密为BP,ea被加密为IM或JM)

    例子:

    明文为we are discovered save yourself,分组成为we ar ed is co ve re ds av ey ou rs el fz;

    用上述矩阵加密后的密文为:UG RM KC SX HM UF MK BT OX GC MV AT LU KV

    用软件后的结果:

请添加图片描述

解码规则:

  1. 若明文字母在矩阵中同行,则循环取其左边下一个字母为密文(矩阵最左边的下一个是最右边的最后一个)(eg: RM被解码为ar)

  2. 若明文字母在矩阵中同列,则循环取其上边上一个字母为密文(矩阵最上边的上一个是最下边的最后一个)(eg: CM被解码为mu)

  3. 若明文字母在矩阵中不同行不同列,则取其同行且与同组另一字母同列的字母为密文(eg: BP被解码为hs,IM或JM被解码为ea)

    请添加图片描述

4.one-time pad 一次一密 (按位异或,支持中英文各类字符)

前面三种古典密码,他们共通的弱点都是语言中字母频率的不等,导致密钥加密后密文中字母出现概率依旧不等,从而发现突破口。导致可以出现泄露。

而一次性密码本,则是使用了与明文等长的密文,使得所有字母的使用概率相等,密文完全不揭示任何明文信息,使得任何唯密文攻击无效。

算法原理:

C:密文 E:加密操作 D:解密操作 m:明文  k:密钥
 
C = E( k, m) = k ⊕ m
 
D = ( k, c) = k ⊕ c

请添加图片描述

请添加图片描述
这里是base64加密后的。
请添加图片描述

猜你喜欢

转载自blog.csdn.net/qq_56607768/article/details/120388272