栅栏密码破解脚本

栅栏密码破解脚本


栅栏密码可以说是最简单最容易理解的密码,只要知道栏数就可以横扫一切
这里依然给出一些离线脚本

传统栅栏密码

知道栏数

def fence(ciphertext,N):
    #分割
    ciphertext_list=[(ciphertext)[i:i+N] for i in range(0, len(ciphertext), N)]
    for i in range(N):
        for j in ciphertext_list:
            print(j[i],end="")


#密文
ciphertext="ciphertext" 
#栏数
N=N
fence(ciphertext=ciphertext,N=N)

这个比较简单,用的时候直接替换密文和栏数即可
比如 密文

iejtlyiiooanvuog

栏数为 4
运行可得明文

iloveyoujiaoting

不知道栏数

这个可能就比较耗时,使用枚举的方法列出所有明文,之后仔细再里面找,在一些比赛中,得到的明文比较长,可以另外写个查找字符串的脚本,比如查找flag,就可以快速的找到对应信息

def fence(ciphertext,N):
    #分割
    ciphertext_list=[(ciphertext)[i:i+N] for i in range(0, len(ciphertext), N)]
    for i in range(N):
        for j in ciphertext_list:
            if i< len(j):
                print(j[i],end="")


#密文
ciphertext="ciphertext" 

for i in range(2,int(len(ciphertext)/2)+1):
    fence(ciphertext=ciphertext,N=i)
    print("")

使用时将密文替换,比如还是上面那个密文,运行后得到结果:

ijlioavoetyionug
itiovgeliaujyono
iloveyoujiaoting
iyageinjivtouloo
iiveiujootoglayn
iioeogjotalnyviu
ioeojatnlvyuioig

显然第三个就是正确的明文

有密钥的栅栏密码

def fence(ciphertext,N,key):
    #分割
    ciphertext_list=[ciphertext[i:i+N] for i in range(0,len(ciphertext),N)]
    #将密钥依次插入到分割完后的每个字符串的开头
    j=0
    for i in range(len(ciphertext_list)):
        if j<len(key):
            ciphertext_list[i]=key[j]+ciphertext_list[i]
            j+=1
    #对列表中的元素进行排序
    ciphertext_sort=sorted(ciphertext_list,key=lambda x:x)
    #进行输出
    for i in range(1,N+1):
        for j in ciphertext_sort:
            if i< len(j):
                print(j[i],end="")      
   
# 密钥
key="key"
# 密文
ciphertext="ciphertext"
# 栏数
N=int(len(ciphertext)/len(key))
fence(ciphertext=ciphertext,N=N,key=key)

使用时替换密钥、密文,如果知道栏数,也可替换栏数
例如密文

lyiiooanvuogiejt

密钥是love
得到结果

iloveyoujiaoting

之后还会持续更新W型栅栏密码

如果有想更深入了解栅栏密码的,可以看看下面的简介


栅栏密码

栅栏密码简介

栅栏密码(Rail Fence Cipher)是一种古典的替换加密技术,其基本思想是将明文按照一定的模式排列,通常是交错排列成多行,然后按照一定的顺序读取这些行以形成密文。这种加密方法相对简单,易于手工操作,但安全性较低,容易被破解。

加密过程
  1. 确定栅栏的行数:首先选择一个数字作为栅栏的行数,这个数字决定了明文将被分成多少行。

  2. 排列明文:将明文的字符交错地写入这些行中,通常是从第一行开始,逐次向下填写,然后回到第一行继续填写下一个字符。

  3. 读取密文:按照预定的顺序(通常是从上到下,然后是下一行的下一个字符,依此类推)读取这些行,形成密文。

解密过程
  1. 确定栅栏的行数:解密时需要知道原始的栅栏行数。

  2. 构建栅栏矩阵:根据密文长度和栅栏行数,构建一个矩阵,并将密文字符填充进去。

  3. 读取明文:按照加密时的逆序读取矩阵中的字符,恢复出原始的明文。

安全性

栅栏密码的安全性相对较低,因为它的加密模式具有一定的规律性。通过分析密文的统计特性,攻击者可以推断出栅栏的行数,进而尝试重建栅栏矩阵并恢复明文。此外,如果明文中包含的字符数量不是栅栏行数的倍数,通常会在明文的末尾添加额外的字符(如空格或特殊符号)以适应栅栏结构。

变体

栅栏密码有多种变体,包括W型栅栏密码,其中密文的书写顺序是先右移动再向下写,形成类似字母“W”的形状。这些变体增加了加密的复杂性,但仍然不足以提供高强度的安全保障。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值