安全存储密码以便在python脚本中使用

use*_*386 71 python security

可能重复:
我需要在Python中安全地存储用户名和密码,我有哪些选择?

我正在寻找一种安全存储密码的方法,我打算在一些Python脚本中使用这些密码.我将登录不同的东西,我不想将密码作为明文存储在脚本本身.

相反,我想知道是否有任何东西能够安全地存储这些密码,然后使用类似主密码的东西检索它们,我可以在开始时输入脚本.

Cpp*_*ner 42

自己知道主密钥.不要硬编码.

使用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)
Run Code Online (Sandbox Code Playgroud)

在某处保存salt和哈希密码,因此无论何时需要使用密码,您都在阅读加密密码,并根据您再次输入的原始密码进行测试.

这基本上是这些天登录应该如何工作的.

  • 您的示例中未定义`raw_password`.它引用了什么? (15认同)
  • 这真的没有回答OP问题.这个答案不是用于存储用于检索的密码......这个答案用于检查某人在您的脚本中输入的密码.OP想要(如我所述)关于如何存储和RETRIVE密码的答案.例如,我想安全地存储我的Gmail密码以供我的脚本使用... (15认同)
  • 我真的不知道怎么用这个?我想`raw_password`是最初应该存储的密码,用户想要使用`master_secret_key`和`salt`来获取它.但你声明必须读取哈希密码并对`raw_password`进行测试,但`raw_password`是未知的!?问题是:如何在`master_secret_key`和`salt`中提取`raw_password`? (5认同)
  • 这在 2020 年仍然是良好的做法并且安全。 (2认同)
  • 如果其他人在 >= 2020 年遇到此问题,我在这里提出了一个更完整/正确的示例要点:https://gist.github.com/JacobJerrell/6a5dd5296aff378557a13efa36b3870d (2认同)

Pra*_*kar 13

我通常有一个secrets.py与我的其他python脚本分开存储,并且不受版本控制.然后,只要有需要,你就可以做到from secrets import <required_pwd_var>.这样,您可以依赖操作系统内置文件安全系统,而无需重新创建自己的文件.

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

更多信息 - 在python脚本中隐藏密码(仅限不安全的混淆)

  • Base64编码密码永远不是一个好主意.它只会给人一种安全感.只是不要这样做.https://paragonie.com/blog/2015/08/you-wouldnt-base64-a-password-cryptography-decoded (22认同)
  • 取决于您是否正在抵御低技术或高科技攻击.对工程有时没有意义. (4认同)
  • 我只制作小型 Python 脚本(工具)并将它们存储在我们公司的 git 服务器中。我也使用这个解决方案,但我不想将所有密码推送到 git 中。所以我的“secrets.py”仅存储在本地。推送到git的版本只是一个空模板,没有真正的密码。 (2认同)

Ted*_*haw 5

安全方式是通过AES加密您的敏感数据,加密密钥是通过基于密码的密钥派生函数(PBE)派生的,PBE是用于加密/解密AES加密密钥的主密码.

主密码 - >安全密钥 - >按密钥加密数据

你可以使用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)
Run Code Online (Sandbox Code Playgroud)

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

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

  • 你能给出一个加密示例的解密示例吗? (5认同)