Railfence 攻防世界

好恶心的题

看起来是普通栅栏密码,
然而

清输入要解密的字符串
ccehgyaefnpeoobe{lcirg}epriec_ora_g
分为5栏时,解密结果为:cebgccfe}_en{eohplprgecrayoii_aoreg

分为7栏时,解密结果为:cyperrocae{gireeol}eahfocec_gnbip_g

????
在尝试了所有可能数的栏,
都还是不行,

GG了,
难道是其它的变形?
不可能啊,
很明显前面的几个格式的字母都含在这串字里面,

emmmm,
恩,这是百度百科上面的解释,
也就是大家常见的那些,

1 2 3 4 5 6 # key=3 进行栅栏加密

1 2 3
4 5 6

结果为 1 4 2 5 3 6

==
那么有一种叫做WWW的变种
1 2 3 4 5 6 # key=3 Rail-fence Cipher

1 . . . 5 . ↘      ↗ ↘
. 2 . 4 . 6    ↘   ↗
. . 3 . . .     ↘ ↗

结果为 1 5 2 4 6 3

rr,太难了,
怎么想到!

PS:WWW型的加密密钥就不只能是字符串长度的因子,小于其长度的任何一个数都可能是其key值,所以第一步也是确定密钥。

既然这样,就写个脚本弄弄,
先写个,普通的栅栏,(今天真的闲的无聊,狗头)

#!/usr/bin/env python3

#常见的栅栏解密

e = input('清输入要解密的字符串\n')
elen = len(e)  # 计算字符串长度
field = []
for i in range(2, elen):  # 做一个循环,从2开始到数字elen(字符串长度)
    if elen % i == 0:  # 计算那些数字能整除字符串长度
        field.append(i)  # 将能整出的数字加入到field里面

for f in field:
    b = elen // f  # 用字符串实际长度除以上面计算出能整出的数字f
    result = {x: '' for x in range(b)}
    for i in range(elen):  # 字符串有多少位,就循环多少次
        a = i % b
        result.update({a: result[a] + e[i]})  # 字符串截断,并更新数据
    d = ''
    for i in range(b):
        d += result[i]
    print('分为'+str(f)+'栏时,解密结果为:'+d+'\n')  # 输出结果,并开始下一个循环
               

现在上个WWW型的加密的,

#W型加密

string=input("输入要加密的字符串\n")

length = len(string)

#猜想不会是一栏,和n栏(滑稽)因为这个就是原来字符串(狗头)

#那么,就暴力遍历一波其中的那些⑧

for i in range(2,length):

    result={x:""for x in range(i)}
    
    for a in range(length) :

        width=i*2-2

        num=a%width

        if(num

hh,太简单了,写个解密的
。。。。太菜了,不想写了,以后有时间回来写,

ps:秘匙是5

直接上个WWW型的解密网站

http://www.atoolbox.net/Tool.php?Id=777

你可能感兴趣的:(攻防世界)