攻防世界密码学部分:'WWW'型栅栏密码

'WWW’型栅栏密码

题目:
攻防世界密码学部分:'WWW'型栅栏密码_第1张图片
密文为: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'型栅栏密码_第2张图片
www型(如本题):

攻防世界密码学部分:'WWW'型栅栏密码_第3张图片

可以写程序也可以在网上找破解工具求解,我自己写的程序:

'''
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)


运行结果:
攻防世界密码学部分:'WWW'型栅栏密码_第4张图片


不要说我懒不写代码的详细解释,我是觉得我的思路太复杂,给我时间让我慢慢写!

你可能感兴趣的:(密码学,栅栏密码,www型,python,攻防世界)