我正在尝试在python中创建一个简单的xor加密程序,我现在所拥有的工作几乎没有,只是有时候它并没有,我只是无法找出原因。例如,如果我输入'你好'和键#12; 1234'它会将它加密到YW_X ^,如果我用相同的密钥解密它,它将打印“你好”。但是,如果我将密钥更改为“qwer”'加密的消息类似于' ^ Y ^ R ^^^^'如果我试图解密它,' heERQWERoi'出来。 这是代码:
from itertools import cycle, izip
choice = int(raw_input('Press 1 to encrypt, 2 to decrypt. '))
if choice == 1:
message = raw_input('Enter message to be encrypted: ')
privatekey = raw_input('Enter a private key: ')
encrypted_message = ''.join(chr(ord(c)^ord(k)) for c,k in izip(message, cycle(privatekey)))
print 'Encrypted message:'
print encrypted_message
elif choice == 2:
todecrypt = raw_input('Enter a message to be decrypted: ')
otherprivatekey = raw_input('Enter the private key: ')
decrypted_message = ''.join(chr(ord(c)^ord(k)) for c,k in izip(todecrypt, cycle(otherprivatekey)))
print 'Decrypted message:'
print decrypted_message
我不知道它有什么问题,所以我非常感谢你的帮助,谢谢!
答案 0 :(得分:0)
它可能正常工作,但是你得到的字符可能无法直接重新输入终端,因为它们与通常可输入的ASCII字符不对应。特别是,使用键qwer
,ord
的值变为[25, 18, 9, 30, 30]
,您可能很难输入(参见this table)。
如果您使用1234
作为关键字,则不会发生类似的问题,因为在这种情况下,值为[89, 87, 95, 88, 94]
,对应于" normal"字符。
答案 1 :(得分:0)
您的脚本正在打印非打印字符,有时无法复制/粘贴。您可以将密文编码为仅使用字符abcdef0123456789
的格式,这样您就可以毫无问题地显示它:
print encrypted_message.encode('hex')
然后,当用户再次输入时,您可以对其进行解码:
todecrypt = raw_input('Enter a message to be decrypted: ').decode('hex')