重複の可能性:
ユーザー名とパスワードをPythonに安全に保存する必要がありますが、どのようなオプションがありますか?
一部のPythonスクリプトで使用する予定のパスワードを安全に保存する方法を探しています。私はさまざまなことにログインしますが、スクリプト自体にパスワードをプレーンテキストとして保存したくありません。
代わりに、それらのパスワードを安全に保存し、最初にスクリプトに入力できるマスターパスワードのようなものを使用してそれらを取得できるものがあるかどうか疑問に思いました。
重複の可能性:
ユーザー名とパスワードをPythonに安全に保存する必要がありますが、どのようなオプションがありますか?
一部のPythonスクリプトで使用する予定のパスワードを安全に保存する方法を探しています。私はさまざまなことにログインしますが、スクリプト自体にパスワードをプレーンテキストとして保存したくありません。
代わりに、それらのパスワードを安全に保存し、最初にスクリプトに入力できるマスターパスワードのようなものを使用してそれらを取得できるものがあるかどうか疑問に思いました。
マスターキーを自分で知ってください。ハードコーディングしないでください。
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)
ソルトとハッシュ化されたパスワードをどこかに保存して、パスワードを使用する必要があるときはいつでも、暗号化されたパスワードを読み取って、もう一度入力する生のパスワードに対してテストします。
これは基本的に、最近のログインの仕組みです。
私は通常secrets.py
、他の python スクリプトとは別に保存され、バージョン管理されていない を持っています。その後、必要なときにいつでも実行できますfrom secrets import <required_pwd_var>
。このようにして、独自のファイル セキュリティ システムを再発明することなく、オペレーティング システムに組み込まれたファイル セキュリティ システムに依存することができます。
Base64
完全に安全ではありませんが、エンコード/デコードの使用もパスワードを難読化する別の方法です。
安全な方法は、機密データをAESで暗号化することです。暗号化キーは、AESの暗号化キーの暗号化/復号化に使用されるマスターパスワードであるパスワードベースのキー導出関数(PBE)による導出です。
マスターパスワード->安全なキー->キーによるデータの暗号化
あなたは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は、同様のアプローチを使用して、構成ファイル内のパスワードを保護しました