安全地存储用于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文件中的密码