在python脚本中隐藏密码(仅用于不安全的混淆)
我有一个python脚本正在创建ODBC连接。 ODBC连接是使用连接字符串生成的。在此连接字符串中,我必须包含此连接的用户名和密码。
有没有一种简便的方法可以使文件中的密码模糊(只是在我编辑文件时没人能读取密码)?
解决方案
在'Net-google上,有几种用Python编写的ROT13实用程序。 ROT13对该字符串进行离线编码,将其复制到源中,然后在传输点进行解码。
但这确实是薄弱的保护...
Base64编码在标准库中,并且可以阻止肩膀冲浪者:
>>> import base64 >>> print base64.b64encode("password") cGFzc3dvcmQ= >>> print base64.b64decode("cGFzc3dvcmQ=") password
操作系统可能提供了用于安全加密数据的工具。例如,在Windows上有DPAPI(数据保护API)。为什么不在我们第一次运行时要求用户提供其凭据,然后将他们松散加密以进行后续运行?
如何从脚本外部的文件中导入用户名和密码?这样,即使有人掌握了该脚本,他们也不会自动获得密码。
当我们需要为远程登录指定密码时,Douglas F Shearer's是Unix中公认的解决方案。
我们添加--password-from-file选项来指定路径并从文件中读取纯文本。
然后,该文件可以位于受操作系统保护的用户自己的区域中。
它还允许不同的用户自动选择自己的文件。
对于不允许脚本用户知道的密码,我们可以在未经许可的情况下运行脚本,并使该密码文件由该root / admin用户拥有。
假设用户无法在运行时提供用户名和密码,最好的解决方案可能是一个单独的源文件,其中仅包含导入到主代码中的用户名和密码的变量初始化。仅在凭据更改时才需要编辑此文件。否则,如果我们只担心具有平均记忆的冲浪者,那么base 64编码可能是最简单的解决方案。 ROT13太容易手动解码,不区分大小写,并且在加密状态下保留了太多含义。在python脚本之外对密码和用户ID进行编码。让他在运行时对脚本进行解码以供使用。
为自动化任务提供脚本凭证始终是一个冒险的建议。脚本应具有其自己的凭据,并且所使用的帐户应完全没有必要,而不能访问。至少密码应该是长且相当随机的。
这是一个非常普遍的问题。通常,我们能做的最好的就是
A)创建某种ceasar密码函数来进行编码/解码(只是不使用rot13)
或者
B)首选方法是在程序可及的范围内使用加密密钥对密码进行编码/解码。我们可以在其中使用文件保护来保护访问密钥。
如果应用程序作为服务/守护程序(例如Web服务器)运行,则可以将密钥放入密码保护的密钥库中,并在服务启动过程中输入密码。管理员需要重新启动应用程序,但是我们对配置密码的保护非常好。
base64是满足我们简单需求的方法。无需导入任何内容:
>>> 'your string'.encode('base64') 'eW91ciBzdHJpbmc=\n' >>> _.decode('base64') 'your string'
将配置信息放置在加密的配置文件中。使用键在代码中查询此信息。将此密钥放在每个环境的单独文件中,不要将其与代码一起存储。