在Python中混淆string

我有一个密码string,必须传递给一个方法。 一切工作正常,但我不觉得明文存储密码的舒适度。 有没有一种方法来混淆string或真正encryption它? 我知道混淆可以被逆向devise,但是我想我至less应该试着掩盖一下密码。 至less它不会被一个索引程序或一个stream浪的眼睛看到我的代码。

我意识到pyobfuscate,但我不希望整个程序混淆,只是一个string,可能是variables定义的整个行本身。

目标平台是GNU Linux Generic(如果这有所作为)

Solutions Collecting From Web of "在Python中混淆string"

如果你只是想防止随便看一眼密码,你可能要考虑编码/解码base64的密码。 这是不安全的,但密码不会随便的人/机器人可读。

 import base64 # Encode password encoded_pw = base64.b64encode(raw_pw) # Decode password decoded_pw = base64.b64decode(encoded_pw) 

显然你最好的选择是委托给第三方。 如果您可以使用其他凭据(例如您的进程正在运行的用户帐户)进行身份验证,则可以将权限级别保留在操作系统层。 或者,如果足够重要/可能,您可以提示用户(将密钥存储在(可以说)稍微少一点的可湿性软件中)

如果您确实需要存储一些密码或密钥,我建议您将其单独存储在您的代码中,存储在您读入的文件中,并在必要时删除它。 这具有以下优点:

  • 你可以设置文件的权限尽可能的紧凑(也就是只能被程序运行的账户读取),而不像其他的程序可以被更多的人阅读。

  • 你不会意外地把它检入你的版本控制系统!

  • 不需要限制为可打印的字符(或使用尴尬的转义)为一个python字符串,所以你可以使用任意的密钥文件,如果可能的话,而不是一个人类可读的密码。 如果它不是人类进入的话,那么就没有理由拥有密码的所有弱点。

为了说清楚,你可以像建议的那样使用base64,或者使用一些自制的方案,比如XORing或者使用其他密钥存储在其他地方解密,这样就需要查看这两个位置。 请注意,这并不能防止机会性肩上冲浪(如果有的话) – 确保有一定程度的真实安全性(包括明显的物理访问机器!)

您应该避免将密码保存在第一位。 这是唯一的“真正的”解决方案。

现在,你可以用哈希模块(md5和python 2.5及以下版本中的类似模块)轻松加密密码。

 import hashlib mypass = "yo" a = hashlib.sha256(mypass).digest() 

许多密码接受协议和设施都可以指定密钥文件而不是密码。 这个策略可能会在这里工作。 而不是硬编码一个密码,硬编码一个文件名(或更好的,使其成为一个参数!)。 甚至可以直接使用SSH,并拒绝加载不能由当前用户(2)拥有的密钥文件,只能由该用户读取。

这很大程度上取决于你为什么要保持密码,以及你感觉到哪里存在安全问题。

如果将来将此密码存储或匹配到数据库:

这应该不是真正的问题,但如果你担心,尽早使用数据库的密码加密并存储(SELECT PASSWORD('mySamplePassword');),然后直接在以后的查询中比较加密版本。

如果您保存以备后用,

真的没有什么可以做的。 传输本身很可能比您处理密码更容易嗅探。

不知道你在做什么的更多细节,这是很难回答。

base64的答案是很好的混淆密码,并将在没有用户干预的代价是不安全的工作。 如果用户可以通过访问系统密钥环服务来登录,请查看密钥环包。 我用它在OS X和Linux系统上存储密码。