在Python中混淆字符串

时间:2009-06-11 16:47:30

标签: python linux encryption passwords obfuscation

我有一个必须传递给方法的密码字符串。一切正常,但我不清楚以明文形式存储密码。有没有办法混淆字符串或真正加密它?我知道混淆可以反向设计,但我认为我至少应该尝试掩盖密码。至少它不会被索引程序看到,也不会让我的代码快速查看。

我知道pyobfuscate,但我不希望整个程序被混淆,只是一个字符串,可能是定义变量的整行本身。

目标平台是GNU Linux Generic(如果这有所不同)

6 个答案:

答案 0 :(得分:23)

如果您只是想防止随便看一眼密码,您可能需要考虑将密码编码/解码到base64。它至少不安全,但密码不会随便人类/机器人可读。

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

# Decode password
decoded_pw = base64.b64decode(encoded_pw)

答案 1 :(得分:2)

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

如果您 需要存储一些密码或密钥,我建议您将代码中的单独存储在您读入的文件中,并且如果必要的话就是晦涩的。这具有以下优点:

  • 您可以尽可能严格地设置文件的文件权限(即只能由您的程序运行的帐户读取),这与您的程序的其他部分不同,可能会被更多人阅读。

  • 您不会意外地将其检入您的版本控制系统!

  • 不需要限制为python字符串的可打印字符(或使用笨拙的转义),因此如果可能,您可以使用任意密钥文件,而不是人类可读的密码。如果它不是人为输入,则没有理由拥有密码的所有弱点。

为了捏造,您可以按照建议使用base64,或者像XORing一样使用家庭酿造方案,或者使用存储在别处的其他密钥进行解密,这需要同时查看两个位置。请注意,除了机会主义的肩膀冲浪(如果有)之外,这不能防止任何事情 - 确保存在某种程度的真正的安全性(包括明显的安全性,例如物理访问机器!)

答案 2 :(得分:1)

您应该首先避免将密码存储为明文。这是唯一的“真正”解决方案。

现在,您可以使用散列模块(md5和python 2.5及更低版本中的类似模块)轻松加密密码。

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

这取决于你为何保持密码,以及你认为存在安全问题的地方。

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

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

如果您要将其保存以供日后传输:

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

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

答案 5 :(得分:0)

base64答案适用于混淆密码,无需用户干预,代价是不安全。如果用户可以通过访问系统密钥环服务登录,请查看keyring包。我用它在OS X和Linux系统上存储密码。