【发布时间】:2017-03-01 16:22:21
【问题描述】:
我正在编写一个随机替换密码,它在用于编写常规句子时效果很好。但是,当我尝试测试 'abbcccddddeeeee' 时,我会得到类似 'G H H I I I J J J J K K K K K K' 的结果。如何更改我的代码,以便循环中每个字母的“key”或“vari”都发生变化,但保持不变,以便没有一个字母对应多个其他字母?
import random
intext = raw_input("Enter a message to encrypt: ")
intext = intext.upper()
key = random.randint(0,27)
vari = random.randint(0,27)
def randomsub(intext):
outtext = []
intext = intext.upper()
for c in intext:
num = ord(c)
if num >= ord('A') and num <= ord('Z'):
num = num - ord('A')
num = num + (key + vari) % 26
num += ord('A')
outtext.append(chr(num))
return ' '.join(outtext)
print randomsub(intext)
【问题讨论】:
-
你得到的结果有什么问题?
-
您是否考虑过解密应该如何工作,无论是您的代码现在的方式还是您希望代码的方式?
-
嗯,喜欢enigma machine?
-
@StefanPochmann 如果它像一个适当的 rsc 一样工作,结果将类似于 GOOZZZIIIIAAAAA;字母不应该是直接顺序
-
@DoNotPutMeInABox:那根本不是加密。加密必须是可解密的。如果它不可解密,你还不如完全忽略输入,只生成一堆随机字节作为输出。
标签: python encryption random substitution