在Python中混淆字符串

10 投票
6 回答
10028 浏览
提问于 2025-04-15 12:11

我有一个密码字符串需要传递给一个方法。现在一切都正常,但我对以明文形式存储密码不太放心。有没有办法让这个字符串变得模糊一些,或者真正加密呢?我知道模糊处理是可以被破解的,但我觉得至少应该尝试把密码隐藏起来。至少这样的话,它不会被索引程序看到,也不会让路过的人一眼就看见我的代码。

我知道有pyobfuscate这个工具,但我不想让整个程序都模糊,只想处理一个字符串,可能还包括定义这个变量的整行代码。

目标平台是GNU Linux Generic(如果这有影响的话)。

6 个回答

1

首先,你应该避免明文存储密码。这才是真正的解决办法。

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

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

显然,最好的办法是把这个问题交给第三方来处理。如果你能用其他的凭证(比如你程序运行时使用的用户账户)来进行身份验证,那么你就可以把权限管理交给操作系统来处理。或者,如果这个问题足够重要,你也可以提示用户输入凭证(把密钥存储在人脑中,虽然这可能不太安全)。

如果你确实需要存储某个密码或密钥,我建议你把它单独存放在一个文件中,而不是直接写在代码里,并在需要的时候读取和解密。这样做有几个好处:

  • 你可以把文件的权限设置得尽可能严格(也就是说,只有你的程序运行的账户可以读取),而不像程序的其他部分可能被更多人访问。

  • 你不会不小心把它提交到版本控制系统里!

  • 你不需要限制使用可打印字符(或者使用麻烦的转义字符)来写Python字符串,这样你可以使用任意的密钥文件,而不是人类可读的密码。如果这个密钥不是人手输入的,就没有必要承受密码的各种弱点。

为了保护这些信息,你可以使用base64编码,或者一些自制的方法,比如异或运算或用存储在其他地方的密钥进行解密,这样就需要同时查看两个地方。要注意,这种方法只能防止一些偶然的窥视(如果有的话)——确保还有一些真正的安全措施(包括像物理访问机器这样的明显措施)!

26

如果你只是想防止别人随便看你的密码,可以考虑把密码进行编码和解码,使用一种叫做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)

撰写回答