我有一个必须传递给方法的密码字符串。一切运作良好,但我不太放心以明文形式存储密码。是否有一种方法可以混淆该字符串或真正加密它?我知道混淆可以被反向工程,但我认为我至少应该尝试一下对密码进行一些掩盖。至少它不会对索引程序或偶然看到我的代码的人显露出来。
我知道pyobfuscate,但我不想混淆整个程序,只是其中一个字符串,并可能是定义变量的整行代码。
目标平台是GNU Linux Generic(如果有区别的话)。
我有一个必须传递给方法的密码字符串。一切运作良好,但我不太放心以明文形式存储密码。是否有一种方法可以混淆该字符串或真正加密它?我知道混淆可以被反向工程,但我认为我至少应该尝试一下对密码进行一些掩盖。至少它不会对索引程序或偶然看到我的代码的人显露出来。
我知道pyobfuscate,但我不想混淆整个程序,只是其中一个字符串,并可能是定义变量的整行代码。
目标平台是GNU Linux Generic(如果有区别的话)。
如果你只是想防止密码被偶然瞥见,可以考虑将密码编码/解码成base64格式。这样做并不安全,但密码就不会轻易被人类或机器读取。
import base64
# Encode password (must be bytes type)
encoded_pw = base64.b64encode(raw_pw)
# Decode password (must be bytes type)
decoded_pw = base64.b64decode(encoded_pw)
首先,您应该避免明文存储密码。这是唯一的“真正”解决方案。
现在,您可以使用哈希模块(在Python 2.5及以下版本中使用md5和类似模块)轻松加密密码。
import hashlib
mypass = "yo"
a = hashlib.sha256(mypass).digest()
使用base64编码可以很好地混淆密码,而且不需要用户干预,但代价是不安全的。如果用户可以通过访问系统钥匙环服务进行登录,请查看keyring包。我曾在OS X和Linux系统上使用它来存储密码。
这很大程度上取决于您为什么要保留密码以及您认为存在安全问题的地方。
如果您将来要将此密码存储或与数据库匹配:
这不应该是一个问题,但如果您担心,可以提前使用数据库的密码加密功能并存储它(SELECT PASSWORD('mySamplePassword');),然后在稍后的查询中直接比较加密版本。
如果您要保存它以备后续传输:
实际上没有太多事情可以做。传输本身很可能比您处理密码更容易被嗅探。
如果不知道您正在做什么的更多细节,这就有点难回答了。
bcrypt
和py-bcrypt
。要了解为什么应该使用它,请阅读 Paul Buchet 的文章,http://paulbuchheit.blogspot.com/2007/09/quick-read-this-if-you-ever-store.html。 - Cristian Ciupitu