0

パスフレーズを使用してファイルを安全に暗号化するための簡単な 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いますが、これを行うことで潜在的なセキュリティリスクはありますか? そうは思いませんが、繰り返しになりますが、私は暗号学者ではありません。

4

1 に答える 1

1

安全性についてはコメントできませんが、SHA256 の実際の 32 バイトが必要な場合はdigest、 ではなくを呼び出す必要がありますhexdigesthexdigest16 進数の文字列表現 (64 文字) を返します。

于 2013-01-21T22:30:15.550 に答える