Python加密函数和全局变量

这个问题在这里已经有了答案:

  • 在不同于创建它们的函数中使用全局变量18个答案

  • 为了保护程序员免受全局变量的影响,全局变量不会被认为存在于函数中,除非您声明他们使用global variablename 。 在maincrypt中,您不要声明global newtext也不要通过分配给它创建本地新newtext 。 + =运算符要求左手已经存在 - 它还没有,所以抛出异常。

    顺便说一下,如果你打算在其他任何地方重用这个程序,最好使用类变量而不是全局变量,所以1)如果别人使用相同的全局变量名,那么所有的都是OK的。2)你可以有两个加密器实例/解密代码运行和加密/解密不同的东西,即使在不同的线程上并行,也不会破坏对方的全局变量。

    另外,这个代码: ord(i.upper()) - ord('A')会给你'a'和'A',1给'b'和'B',2给'c'和' C'...等等,所以你不需要这样巨大的if / elif链。 (为什么这样做是因为'A','B','C'等在ASCII中是连续的,所以'B' - 'A'是1等等)


    首先,这里有相当强大的几乎不可破解的加密算法,其中一些已经预先包装了python,如hmac

    import hmac
    
    def Hash_string(ref):
            cypher = hmac.new('you secret word', 'plain-text')
            return cypher.hexdigest()
    

    简单到足以使用,更强大。 你也可以使用河豚进行更高级和更安全的项目,尽管它默认没有使用python,但它很容易设置。

    现在到你的代码,下面是如何在python中使用全局变量

    # declare variables as global
    global num1
    global num2
    num2=22    # give initial value to num2
    
    def foo():
       # bind variable names to the ones in global scope
       global num2
       print num2   # output: 22
       num2 = 88
       print num2   # output: 88
       global num1
       num1 = num2
    
    def bar():
       print num1   # output: 88
       print num2   # output 88
    
    foo()
    bar()
    

    所以你需要将newtext绑定到声明为gobal的那个

    我还建议你重写加密来看起来像这样

    alpha = ['a','b','c','d','e','f','g','h','i','j','k','1' , 'M', 'N', 'O', 'p', 'q', 'R', 'S', 'T', 'U', 'v', 'W', 'X',” Y”, 'Z']

    数字= [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 ,24,25]

    def map (ch):
       chr = ch.lower()
       return numeric[alpha.index(chr)]
    

    这将创建数字和字母之间的映射,因此您不需要一长串elifs

    希望这可以帮助。

    编辑你可以使用全局关键字访问全局变量,但是如果你想修改它们,你首先需要绑定到全局变量,然后才能更改它们。

    编辑改变了返回数字[索引(字符串)]返回数字[alpha.index(字符)]抱歉的错误:)

    链接地址: http://www.djcxy.com/p/23887.html

    上一篇: Python encryption function and global variables

    下一篇: Read a text file and save value as variable in python