安全地存储用于Python脚本的密码

可能重复:
我需要在Python中安全地存储用户名和密码,我有什么select?

我正在寻找一种方法来安全地存储我打算在某些Python脚本中使用的密码。 我将login到不同的东西,我不想将密码作为纯文本存储在脚本本身。

相反,我想知道是否有任何能够安全地存储这些密码的东西,然后使用像我可以input到脚本开始的主密码的东西来检索它们。

亲自了解主密钥。 不要硬编码。

使用py-bcrypt (bcrypt),强大的哈希技术来自己生成密码。

基本上你可以做到这一点(一个想法…)

 import bcrypt from getpass import getpass master_secret_key = getpass('tell me the master secret key you are going to use') salt = bcrypt.gensalt() combo_password = raw_password + salt + master_secret_key hashed_password = bcrypt.hashpw(combo_password, salt) 

保存盐和哈希密码的地方,所以无论何时您需要使用密码,您正在阅读encryption的密码,并再次testing原始密码。

这基本上是如何login这些天应该如何工作。

我通常有一个secrets.py与我的其他Python脚本分开存储,不受版本控制。 那么只要需要,你可以from secrets import <required_pwd_var> 。 这样,您就可以依靠操作系统内置的文件安全系统,而无需重新创build自己的文件安全系统。

使用Base64编码/解码也是混淆密码的另一种方式,虽然不完全安全

更多这里 – 在python脚本中隐藏密码(只有不安全的混淆)

安全的方式是用AESencryption你的敏感数据,encryption密钥是由基于密码的密钥导出函数(PBE)派生的,主密码用来encryption/解密AES的encryption密钥。

主密码 – >安全密钥 – >通过密钥encryption数据

你可以使用pbkdf2

 from PBKDF2 import PBKDF2 from Crypto.Cipher import AES import os salt = os.urandom(8) # 64-bit salt key = PBKDF2("This passphrase is a secret.", salt).read(32) # 256-bit key iv = os.urandom(16) # 128-bit IV cipher = AES.new(key, AES.MODE_CBC, iv) 

确保存储salt / iv / passphrase,并使用相同的salt / iv / passphase进行解密

Weblogic使用类似的方法来保护configuration文件中的密码