'WWW’型栅栏密码
题目:
密文为:ccehgyaefnpeoobe{lcirg}epriec_ora_g
普通栅栏密码:
假如有一个字符串:123456789
取字符串长度的因数进行分组,假如key=3
1 2 3 \\分组情况,每三个数字一组,分为三组
4 5 6
7 8 9
然后每一组依次取一个数字组成一个新字符串:147258369 \\加密完成的字符串
def decode(s, n):
f = len(s) // n
c = ''
for i in range(f):
for j in range(0, len(s)):
if j % f == i:
c += s[j]
print('明文为:{}'.format(c))
return 0
s = input('密文为:')
n = eval(input('栅栏深度:'))
decode(s, n)
运行结果:
www型(如本题):
可以写程序也可以在网上找破解工具求解,我自己写的程序:
'''
WWW型栅栏密码
'''
def num(s, n):
f = len(s) // (n - 1)
g = len(s) % (n - 1)
return f, g
def _list(s, n):
x, y = num(s, n)
if y == 0:
c = [[] for i in range(x + 1)]
lie = x
else:
c = [[] for i in range(x + 2)]
lie = x + 1
jk = 0
if lie % 2 == 0:
hk = n - y + 1
else:
hk = y
for i in range(1, n + 1):
for j in range(1, lie + 1):
if i == 1:
if j % 2 != 0:
c[j].append(s[jk])
jk += 1
else:
if lie % 2 == 0:
if y == 0:
if i != n:
c[j].append(s[jk])
jk += 1
if i == n:
if j % 2 == 0:
c[j].append(s[jk])
jk += 1
else:
if i != n:
if i >= hk:
c[j].append(s[jk])
jk += 1
else:
if j % 2 == 0:
c[j].append(s[jk])
jk += 1
else:
if y == 0:
if i != n:
c[j].append(s[jk])
jk += 1
if i == n:
if j % 2 == 0:
c[j].append(s[jk])
jk += 1
else:
if i <= hk:
c[j].append(s[jk])
jk += 1
else:
if j != lie:
if i < n:
c[j].append(s[jk])
jk += 1
else:
if j % 2 == 0:
c[j].append(s[jk])
jk += 1
cs = ''
for i in range(1, len(c)):
if i % 2 != 0:
for j in range(0,len(c[i])):
cs += c[i][j]
else:
for j in range(len(c[i]) - 1, -1, -1):
cs += c[i][j]
print('明文为:{}'.format(cs))
s = input('请输入密文:')
n = int(input('栅栏深度:'))
_list(s, n)
运行结果:
不要说我懒不写代码的详细解释,我是觉得我的思路太复杂,给我时间让我慢慢写!