大家好,我在使用这个脚本时遇到了一些问题。该脚本应该基本上提示输入,然后加密用户输入的任何内容,然后用户可以通过键入加密消息返回并解密消息。脚本的加密部分工作正常,它只是给我带来问题的解密部分。以下是代码和事先感谢:D
def encrypt(key, msg):
encryped = []
for i, c in enumerate(msg):
key_c = ord(key[i % len(key)])
msg_c = ord(c)
encryped.append(chr((msg_c + key_c) % 127))
return ''.join(encryped)
def decrypt(key, encryped):
msg2 = []
for i, c in enumerate(encryped):
key_c = ord(key[i % len(key)])
enc_c = ord(c)
msg.append(chr((enc_c - key_c) % 127))
return ''.join(msg)
welcome = str(input("Press 1 to encrypt or anything else to decrypt: "))
if welcome in ['1', '1']:
var = input("Please type in what you want to encrypt: ")
if __name__ == '__main__':
key = 'This is the key'
msg = var
encrypted = encrypt(key, msg)
decrypted = decrypt(key, encrypted)
print ('Please take down the key and encryption message to decrypt this message at a later stage')
print ('This is what you want to encrypt:' , repr(msg))
print ('This is the encryption/decryption key:', repr(key))
print ('This is the encrypted message:', repr(encrypted))
else:
var2 = input("Please enter your encrypted message that you would like to decrypt: ")
if __name__ == '__main__':
key = 'This is the key'
msg = var2
decrypted = decrypt(key, var2)
print ('This is the decrypted message:', repr(decrypted))
答案 0 :(得分:0)
简化版本:
def encrypt(key, msg):
encrypted = []
for i, c in enumerate(msg):
key_c = ord(key[i % len(key)])
msg_c = ord(c)
encrypted.append(chr((msg_c + key_c) % 127))
return ''.join(encrypted)
def decrypt(key, encryped):
msg = []
for i, c in enumerate(encryped):
key_c = ord(key[i % len(key)])
enc_c = ord(c)
msg.append(chr((enc_c - key_c) % 127))
return ''.join(msg)
if __name__ == '__main__':
welcome = input('Press 1 to encrypt or anything else to decrypt: ')
key = 'This is the key'
if welcome == '1':
msg = input('Please type in what you want to encrypt: ')
encrypted = encrypt(key, msg)
print('Please take down the key and encryption message to decrypt this message at a later stage')
print('This is what you want to encrypt:', repr(msg))
print('This is the encryption/decryption key:', repr(key))
print('This is the encrypted message:', repr(encrypted))
else:
msg = input('Please enter your encrypted message that you would like to decrypt: ')
msg = msg.encode('utf-8').decode('unicode_escape')
decrypted = decrypt(key, msg)
print('This is the decrypted message:', repr(decrypted))
由于加密文本包含前32个ASCII字符作为转义的十六进制文字,因此在解密输入时,它们不会被解释为这样。要处理转义的文字,可以使用msg.encode("utf-8").decode("unicode_escape")
(建议here)。 您也可以使用ascii
进行编码,因为加密文本只包含最多127个ASCII字符。