1

我有这个变量:message = "Hello World" 并且我构建了一个对其进行洗牌的函数:

def encrypt3(message,key):
    random.seed(key)
    l = range(len(message))
    random.shuffle(l)
    return "".join([message[x] for x in l])

这个函数只是打乱消息,所以它看起来像这样,例如“Hrl llWodeo”

现在,如果我想使用 itertools.permutations 再次将其转换为消息,我该怎么做?当我尝试这个时:print [x for x in itertools.permutations(shuffledMsg)] 程序因错误而关闭,因为它有很多可能性。

4

1 回答 1

1

只要您知道原始种子,这当然是“不可改组的”,因为我们可以简单地重新运行它以找出每个字符转移到的位置。

import random

def encrypt3(message,key):
    random.seed(key)
    l = range(len(message))
    random.shuffle(l)
    return "".join([message[x] for x in l])


key = 'bob'
message = 'Hello World!'

print(encrypt3(message, key))


def unshuffle(message, key):
    random.seed(key)
    new_list = list(range(len(message)))
    old_list = [None] * len(new_list)

    random.shuffle(new_list)

    for i, old_i in enumerate(new_list):
        old_list[old_i] = message[i]

    return ''.join(old_list)


print(unshuffle(encrypt3(message, key), key))
于 2013-11-11T19:14:16.657 回答