パスフレーズを使用してファイルを安全に暗号化するための簡単な Python ソリューションを作成しようとしています。bcrypt
またはのようなものを使用pbkdf2
して、時間が経つにつれて、パスワードハッシュをブルートフォースに対してますます困難にすることができると考えました. また、AES は非常に安全な標準であるため、実際の暗号化には AES を使用すると考えました。暗号化に固執しているわけではありませんが、とても気に入っていbcrypt
ます。
実際に暗号化を実行する方法を理解するのに非常に苦労しています。暗号化したいパスフレーズとファイルがあるとします。私は本質的に次のようなことをする必要があると思います:
from Crypto.Cipher import AES
from bcrypt import gensalt, hashpw
from hashlib import sha256
def encryptify(passphrase, file_name):
target_file = open(file_name, 'r')
# generate password, takes time
passphrase_rounds = 15
passphrase_salt = gensalt(rounds)
passphrase = sha256(hashpw(passphrase, passphrase_salt)).hexdigest()
# encrypt the file
encrypted_file = AES.new(passphrase, AES.MODE_CBC).encrypt(target_file.read())
最後のステップでValueError
、鍵の長さは 16、24、または 32 バイトでなければならないというメッセージが表示されて失敗します。私が理解していないのは、私がやっていることは安全で、なぜ最後のステップが失敗するのかということです. SHA256 は 32 文字のデータを出力すると思いましたか?
bcrypt
パスフレーズを取得してそれを投げることについて特に心配してsha256
いますが、これを行うことで潜在的なセキュリティリスクはありますか? そうは思いませんが、繰り返しになりますが、私は暗号学者ではありません。