栅栏密码破解脚本
栅栏密码可以说是最简单最容易理解的密码,只要知道栏数就可以横扫一切
这里依然给出一些离线脚本
传统栅栏密码
知道栏数
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)是一种古典的替换加密技术,其基本思想是将明文按照一定的模式排列,通常是交错排列成多行,然后按照一定的顺序读取这些行以形成密文。这种加密方法相对简单,易于手工操作,但安全性较低,容易被破解。
加密过程
-
确定栅栏的行数:首先选择一个数字作为栅栏的行数,这个数字决定了明文将被分成多少行。
-
排列明文:将明文的字符交错地写入这些行中,通常是从第一行开始,逐次向下填写,然后回到第一行继续填写下一个字符。
-
读取密文:按照预定的顺序(通常是从上到下,然后是下一行的下一个字符,依此类推)读取这些行,形成密文。
解密过程
-
确定栅栏的行数:解密时需要知道原始的栅栏行数。
-
构建栅栏矩阵:根据密文长度和栅栏行数,构建一个矩阵,并将密文字符填充进去。
-
读取明文:按照加密时的逆序读取矩阵中的字符,恢复出原始的明文。
安全性
栅栏密码的安全性相对较低,因为它的加密模式具有一定的规律性。通过分析密文的统计特性,攻击者可以推断出栅栏的行数,进而尝试重建栅栏矩阵并恢复明文。此外,如果明文中包含的字符数量不是栅栏行数的倍数,通常会在明文的末尾添加额外的字符(如空格或特殊符号)以适应栅栏结构。
变体
栅栏密码有多种变体,包括W型栅栏密码,其中密文的书写顺序是先右移动再向下写,形成类似字母“W”的形状。这些变体增加了加密的复杂性,但仍然不足以提供高强度的安全保障。