我试图解密由随机生成的8个字符密钥加密的消息

时间:2015-07-29 14:45:51

标签: python encryption

def fnDecrypt():

    key = raw_input("Please type the offset factor key: ")
    name = raw_input("Please enter the name of the file you want to decrypt: ")
    offset_factor = key

    encrypted_message = open(name,'r')
    message = encrypted_message.read()
    print "The contents of the file you are decrypting is: " + message
    for c in message:
            number = ord(c)
            if c != " ":
                    number -= offset_factor
                    if number  > 126:
                           number = number + 94
                       new_character = chr(number)
            encrypted_message -= new_character
    print 1

    print encrypted_message

    return;

此代码应该使用用于加密它的相同八个字符密钥来解密加密邮件。我得到此错误消息:UnboundLocalError:在赋值之前引用的局部变量'new_character'

2 个答案:

答案 0 :(得分:2)

您的错误“UnboundLocalError: local variable 'new_character' referenced before assignment”是由于您在定义之前访问new_character变量而导致的。

当我们关注代码的这一部分时,可以看到这一点:

if number > 126:
    number = number + 94
    new_character = chr(number)
encrypted_message -= new_character

如您所见,您在new_character块中定义了if number > 126:变量 ,但您在if的{​​{1}}之外使用了它。

当变量encrypted_message -= new_character小于126时,您永远不会输入number块,因此您永远不会定义if

答案 1 :(得分:-1)

stacktrace" UnboundLocalError:局部变量' new_character'在分配前引用"通常发生在您尝试使用未引用计算机的变量时。

UnBoundLocalError: local variable referenced before assignment (Python)

if 条件不正确,并且您在引用之前尝试使用变量 new_character 。这就是为什么编写 else 以进行调试非常重要的原因。

     for c in message:
        number = ord(c)
        if c != " ":
                number -= offset_factor
                if number  > 126:
                       number = number + 94
                else:
                     print "Something went wrong"
                new_character = chr(number)
        encrypted_message -= new_character