在Python中反转加密算法

时间:2013-12-15 22:39:24

标签: python encryption cryptography

大家好,我在使用这个脚本时遇到了一些问题。该脚本应该基本上提示输入,然后加密用户输入的任何内容,然后用户可以通过键入加密消息返回并解密消息。脚本的加密部分工作正常,它只是给我带来问题的解密部分。以下是代码和事先感谢: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))

1 个答案:

答案 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字符。