在Python中混淆字符串

2024-05-17 04:36:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个必须传递给方法的密码字符串。一切正常,但我觉得不舒服,以明文存储密码。有没有办法混淆字符串或真正加密它?我知道模糊处理可以逆向工程,但我认为我至少应该试着掩盖一下密码。至少索引程序看不到它,或者一只眼睛快速地看了看我的代码。

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

目标平台是GNU-Linux通用平台(如果这有区别的话)


Tags: 方法字符串代码gnu程序密码目标定义
3条回答

您应该首先避免将密码存储在clear中。这是唯一“正确”的解决方案。

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

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

如果您只是想防止随意浏览密码,您可能需要考虑将密码编码/解码到/从base64。它一点也不安全,但密码不会被人/机器人随意读取。

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

# Decode password
decoded_pw = base64.b64decode(encoded_pw)

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

如果您确实需要存储一些密码或密钥,我建议您将其存储在一个文件中,并将其与代码分离,必要时进行去模糊处理。这样做的好处是:

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

  • 你不会不小心把它签入你的版本控制系统!

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

为了混淆,您可以按照建议使用base64,或者使用一些自制的方案,例如使用存储在其他地方的另一个密钥进行异或解密,这需要查看这两个位置。请注意,这并不能防止任何超出机会主义的肩上冲浪(如果是的话)-确保有一定程度的真实的安全性以及(包括像物理访问机器这样明显的安全性!)

相关问题 更多 >