[英]Python XOR Encryption program sometimes doesn't work
我正在嘗試使用python創建一個簡單的xor加密程序,而現在我的工作幾乎可以正常工作,只是有時不能,我只是想不出原因。 例如,如果我輸入“ 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
我不知道它有什么問題,因此,我非常感謝您的幫助,謝謝!
可能工作正常,但是您收到的字符可能無法直接重新輸入到終端中,因為它們與通常可輸入的ASCII字符不對應。 特別是,使用鍵qwer
, ord
的值變為[25, 18, 9, 30, 30]
qwer
[25, 18, 9, 30, 30]
,您可能很難輸入(請參閱此表 )。
如果使用1234
作為鍵,則不會發生類似的問題,因為在這種情況下,值是[89, 87, 95, 88, 94]
,它們對應於“正常”字符。
您的腳本正在打印非打印字符,有時無法復制/粘貼。 您可以將密文編碼為僅使用字符abcdef0123456789
的格式,這使您可以毫無問題地顯示密文:
print encrypted_message.encode('hex')
然后,當用戶再次輸入時,您可以對其進行解碼:
todecrypt = raw_input('Enter a message to be decrypted: ').decode('hex')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.