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

时间:2015-06-11 15:49:43

标签: python passwords base64

我需要使用密码登录我需要在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()字符串并在程序需要密码的每一周解码它?

2 个答案:

答案 0 :(得分:4)

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

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

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

另一种选择是允许用户直接在第三方网站上注册自己的用户名/密码(您甚至可以自动执行),然后提示用户输入其唯一凭据并将其存储在用户主目录中或某事(如果你想要加密/编码......)

根据您的修改,我认为以下内容可能适用于您的用例 如果您将它分发给一个非常小的受信任组,或者如果人们从程序中获取凭据,您会发现一种不太在意的方法,那么在代码本身中有许多方法可以对您的密码进行编码/加密/混淆。包括base64编码,或者加密它,将它分成几个地方。所有这些都会阻止人们扫描代码密码的最常见方式(但一个坚定的人肯定能够恢复密码)

答案 1 :(得分:1)

请勿在程序中嵌入密码(清除或混淆)。而是允许用户在文件中提供密码。这是标准FTP和MySQL客户端等程序采用的方法。

对于奖励积分,请检查不同的非root用户是否无法读取(最好不要写入或替换)该文件。如果是这样,请退出并显示错误消息,以便用户必须修复它。

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

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