Python解密

时间:2011-04-21 22:12:24

标签: python encryption

我目前正在做家庭作业,我们必须建立一个功能,我们制作一个三步加密/解密程序。我们必须构建的密码之一是转置/轨道围栏,它将变量(n)作为一些“轨道”,您希望将消息加密。我已经构建了加密,但是我我失去了解密方法。

这是针对python的介绍级别类,因此除了下面包含的加密代码之外,我们不太了解基础知识。

如果您不确定我的意思是转置加密/铁路围栏就是一个例子......

Message = abcdefg
n = 3

它最终被加密成3组(如n所示),这些组将是"adg be cf",然后加密将它们重新组合成一个字符串"adgbecf"。我的麻烦是将它们分解为原始的三个"adg be cf"字符串,然后将它们转换回原始值。

加密:

def trans_encrypt(message, n):
    cipher = ""
    for i in range(n):
        for j in range(i, len(message), n):
            cipher = cipher + message[j]
    return cipher

当前解密(不起作用):

def trans_decrypt(cipher, n):
    length = len(cipher) // n
    message = ''
    for i in range(length): 
        for j in range(n):
            letter = (i + j * length) 
            message = message + cipher[letter] 
    return message

2 个答案:

答案 0 :(得分:3)

如果你的加密方法是正确的,(有人评论说这不是轨道密码),则以下情况属实:

您可以像这样进行加密:

>>> def trans_encrypt(message,n):
...     return "".join([message[i::n] for i in range(n)])
... 
>>> trans_encrypt(a,3)
'adgbecf'

我会给你一个关于你的解密的提示:

>>> b = 'adgbe cf '
>>> trans_encrypt(b,3)
'abcdefg  '

我在“加密”字符串中插入了空格,只是在“加密”字符串上使用了加密方法来解密它。我得到了正确的结果,最后有一些额外的预期空间。

我会让你弄清楚如何计算添加空格的位置,因为这是作业。

您的解密方法只能修改消息(插入空格),调用加密方法,并删除尾随空格。

答案 1 :(得分:1)

问题是密码不一定能被n整除,因此加密函数创建的'bins'的长度不一样。第一个len(密码)%n个分箱有一个额外的字母。

当您在decrypt函数中迭代j时,如果i小于len(密码)%n,则范围应为n + 1.