Python 解密
我现在正在做一个作业,我们需要写一个程序,完成三步的加密和解密。其中一个加密方法是换位加密/铁路栅栏加密,它需要一个变量(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 个回答
1
问题在于,密码(cipher)不一定能被 n 整除,所以你用加密函数创建的“箱子”(bins)并不是长度都一样的。前面 len(cipher)%n 个箱子会多一个字母。
当你在解密函数中循环 j 的时候,如果 i 小于 len(cipher)%n,范围应该是 n+1。
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 '
我在“加密”的字符串中插入了空格,然后直接对这个“加密”的字符串使用加密方法来解密。我得到了正确的结果,只是最后多了一些预期的空格。
我就不告诉你怎么计算在哪里加空格了,因为这是你的作业。
你的解密方法可以简单地修改消息(插入空格),调用你的加密方法,然后去掉末尾的空白。