Python XOR加密程序有时不起作用

时间:2016-08-25 18:47:19

标签: python python-2.7 encryption cryptography xor

我正在尝试在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

我不知道它有什么问题,所以我非常感谢你的帮助,谢谢!

2 个答案:

答案 0 :(得分:0)

它可能正常工作,但是你得到的字符可能无法直接重新输入终端,因为它们与通常可输入的ASCII字符不对应。特别是,使用键qwerord的值变为[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')