Python加密函数和全局变量
这个问题在这里已经有了答案:
为了保护程序员免受全局变量的影响,全局变量不会被认为存在于函数中,除非您声明他们使用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