古典密码2

本篇接上

多表加密密码

playfair

本密码也是一种简单的替换密码

简单原理:1、选取一串英文字母作为密钥除去重复字母后,按顺序排入5*5的矩阵中,剩余空位将未加入的A-Z顺位填入,(Q去除,I,J视为相同);

2、明文两两一组,若相同则在该组第一个字母后加入X后重新分组,单剩余一个也加X

3、若字母不同行不同列,则找出两个字母与这两个字母组成矩形(第一个字母对应行优先);若同行,则选右方字母;如同列,则选下方字母

Poiybius

又称棋盘密码,密码表例子如下

例题:

密文:ilnllliiikkninlekile

压缩包给了一行十六进制:546865206c656e677468206f66207468697320706c61696e746578743a203130

请对密文解密

十六进制得"The length of this plaintext: 10"

由密文可知密码表由i,l,n,k,e五个构成,可想到为棋盘密码,由于未知五个字母如何排序,可爆破

import itertools

key = []
cipher = "ilnllliiikkninlekile"

for i in itertools.permutations('ilnke', 5):
    key.append(''.join(i))


for now_key in key:
    solve_c = ""
    res = ""
    for now_c in cipher:
        solve_c += str(now_key.index(now_c))
    for i in range(0,len(solve_c),2):
        now_ascii = int(solve_c[i])*5+int(solve_c[i+1])+97
        if now_ascii>ord('i'):
            now_ascii+=1
        res += chr(now_ascii)
    if "flag" in res:
        print(now_key,res)

运行后可得linke flagishere

Vigenere 维吉尼亚密码

一系列凯撒密码组成

简单原理:明文:come greatwall;密钥:crypto
将密钥进行填充使其长度与明文长度一样。

明文    c    o    m    e    g    r    e    a    t    w    a    l    l
密钥    c    r    y    p    t    o    c    r    y    p    t    o    c
其次,查表得密文:efkt zferrltzn

破解:大部分多表密码的破译都是以字母频率为基础的,而在维吉尼亚密码中,一个字母可以被加密成不同的密文,所以简单的频率分析无法采用,关键在于它的密钥是循环重复的。 如果我们知道了密钥的长度,那密文就可以被看作是交织在一起的凯撒密码,而其中每一个都可以单独破解。关于密码的长度,我们可以 使用卡西斯基试验和弗里德曼试验来获取。

卡西斯基试验是基于类似 the 这样的常用单词有可能被同样的密钥字母进行加密,从而在密文中重复出现。

如密钥DYDUXRMHTVDVNQDQNWDYDUXRMHARTJGWNQD
其中,两个 DYDUXRMH 的出现相隔了 18 个字母。因此,可以假定密钥的长度是 18 的约数,即长度为 18、9、6、3 或 2。而两个 NQD 则相距 20 个字母,意味着密钥长度应为 20、10、5、4 或 2。取两者的交集,则可以基本确定密钥长度为 2。

Nihilist

又称关键字密码,明文 + 关键字 = 密文,类似 Polybius 密码,新建一个 5 × 5 矩阵M

参照矩阵 M 进行解密,可以看出,密文的特征有如下几点(密文就是在矩阵中的位置):
纯数字;只包含 1 到 5;密文长度偶数。

Hill

希尔密码(Hill)使用每个字母在字母表中的顺序作为其对应的数字,即 A=0,B=1,C=2 等,然后将明文转化为 n 维向量,跟一个 n × n 的矩阵相乘,再将得出的结果模 26。注意用作加密的矩阵(即密匙)在 Z n 26必须是可逆的,否则就不可能解码。只有矩阵的行列式和 26 互质,才是可逆的。

AutokeyCipher

自动密钥密码也是多表替换密码,与维吉尼亚密码密码类似,但使用不同的方法生成密钥。通常来说它要比维吉尼亚密码更安全。自动密钥密码主要有两种,关键词自动密钥密码和原文自动密钥密码。

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值