Безопасное хранение паролей для использования в python script
Возможный дубликат:
Мне нужно безопасно хранить имя пользователя и пароль в Python, какие у меня параметры?
Я ищу способ безопасного хранения паролей, которые я намерен использовать в некоторых сценариях на Python. Я буду регистрироваться в разных вещах, и я не хочу хранить пароли как открытый текст в самом script.
Вместо этого мне было интересно, есть ли что-то, что может безопасно хранить эти пароли, а затем извлекать их с помощью чего-то вроде главного пароля, который я мог бы ввести в script в начале.
Ответы
Ответ 1
Знайте главный ключ самостоятельно. Не пытайтесь это сделать.
Используйте 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)
сохраните соль и хешируйте пароль где-нибудь, поэтому всякий раз, когда вам нужно использовать пароль, вы читаете зашифрованный пароль и проверяете исходный пароль, который вы вводите снова.
Это в основном то, как логин должен работать в наши дни.
Ответ 2
У меня обычно есть secrets.py
, который хранится отдельно от моих других скриптов python и не находится под управлением версиями. Затем, когда это необходимо, вы можете сделать from secrets import <required_pwd_var>
. Таким образом, вы можете полагаться на встроенную систему безопасности файлов в операционных системах, не изобретая свои собственные.
Использование Base64
кодирования/декодирования также является еще одним способом обфускации пароля, хотя и не полностью защищенного
Подробнее здесь Скрытие пароля в python script (небезопасная обфускация)
Ответ 3
безопасный способ шифрует ваши конфиденциальные данные AES, а ключ шифрования - это деривация с помощью функции деривации ключа на основе пароля (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)
обязательно сохраните соль /iv/passphrase и расшифруйте, используя ту же соль /iv/passphase
Weblogic использовал аналогичный подход для защиты паролей в конфигурационных файлах