【问题标题】:Python XOR Encryption program sometimes doesn't workPython XOR 加密程序有时不起作用
【发布时间】:2017-01-02 07:43:50
【问题描述】:

我正在尝试在 python 中制作一个简单的异或加密程序,而我现在所拥有的几乎可以正常工作,只是有时它不能,我只是不知道为什么。例如,如果我输入“hello”和密钥“1234”,它会将其加密为 YW_X^,然后如果我使用相同的密钥对其进行解密,它将打印“hello”。但是,如果我将密钥更改为“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

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

【问题讨论】:

  • 出于好奇,为什么要异或加密?
  • 只是出于兴趣,我不会用它来做任何事情

标签: python python-2.7 encryption cryptography xor


【解决方案1】:

它可能工作正常,但是您得到的字符可能无法直接重新输入到终端中,因为它们与通常可输入的 ASCII 字符不对应。特别是使用qwer 键,ord 的值变为[25, 18, 9, 30, 30],您可能很难输入(参见this table)。

如果您使用1234 作为键,则不会出现类似问题,因为在这种情况下,值是[89, 87, 95, 88, 94],对应于“普通”字符。

【讨论】:

    【解决方案2】:

    您的脚本正在打印非打印字符,有时无法复制/粘贴。您可以将密文编码为仅使用字符abcdef0123456789 的格式,这样您就可以毫无问题地显示它:

    print encrypted_message.encode('hex')
    

    您可以在用户再次输入时对其进行解码:

    todecrypt = raw_input('Enter a message to be decrypted:   ').decode('hex')
    

    【讨论】:

    • 非常感谢,我认为这与此有关,但不知道实际上是否有解决方案。
    猜你喜欢
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多