如何避免在 Python 代码中存储密码

How to avoid storing password in Python code

我需要使用密码登录服务我需要在 Python 中做一些事情,但我不想在代码中存储密码。

我做了一些研究并找到了 base64 编码。这看起来不错,但无论如何都需要将密码存储在代码中。

>>> import base64
>>> encoded = base64.b64encode('data to be encoded') # password stored in the code
>>> encoded
'ZGF0YSB0byBiZSBlbmNvZGVk'
>>> data = base64.b64decode(encoded)
>>> data
'data to be encoded'

对于已经在 Python 中使用过密码管理的人来说,最好的选择是什么?将密码存储在文件中?仅使用生成的 b64encode() 字符串并在每次程序需要密码时对其进行解码?

我只能假设您是在谈论将您的凭据存储到网站,用户无法自行注册?

最正确的做法是不做。在程序中存储凭据通常不是很安全,想要(并且知道如何)的人将能够获得这些凭据

对于避免将您的凭据存储在代码中的解决方案,您可以创建一个中间件服务器来存储用户注册的个人用户凭据,然后将您的站点凭据存储在该服务器上,以便用户访问您的中间件中的端点然后使用您的登录凭据和 returns 逐字输出对站点进行查询。然而,这也是一个相当困难的解决方案。但是,如果您将其分发给不受信任的用户,并且您认为保护第 3 方凭据非常重要,这确实是您唯一的选择。

另一种选择是允许用户直接在第三方网站上注册他们自己的 username/password(您甚至可以将其自动化),然后提示用户输入他们的唯一凭据并将其存储在用户主目录或其他内容(encrypt/encode 如果你想要...)

根据您的修改,我认为以下内容可能适用于您的用例 如果您将它分发给一个非常小的受信任组,或者您找到了一种方法来不太关心人们是否从程序中获取了凭据,那么有很多方法可以 encode/encrypt/obfuscate 在代码本身中设置您的密码。包括对其进行base64编码,或对其进行aes加密,将其分成几个地方。所有这些都将阻止人们扫描代码获取密码的最常见方式(但有决心的人一定能够恢复它)

不要在您的程序中嵌入密码(明文或混淆)。相反,允许用户在文件中提供密码。这是标准 FTP 和 MySQL 客户端等程序所采用的方法。

为了加分,请检查该文件是否不能被其他非根用户读取(最好不要写入或替换)。如果是,则退出并显示错误消息,以便用户必须修复它。

请注意,您将在内存中拥有一个有价值的密码 - 考虑在使用后尽快覆盖,因此它不会出现在任何核心文件中。

如果您的平台有合适的密钥环实现,您可以考虑使用 Python keyring 包。