0
我正在嘗試編寫一個簡單的Python解決方案來使用密碼安全地加密文件。我想我會使用類似bcrypt
或pbkdf2
的東西,以便隨着時間的推移,我可以使我的密碼哈希值越來越難以暴力破解。我也認爲我會使用AES來進行實際的加密,因爲這是一個非常安全的標準。我沒有固定加密密碼,但我真的很喜歡bcrypt
。使用多輪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
,這樣做是否存在潛在的安全風險?我不會想象如此,但再一次,我不是密碼學家。
太好了,但不幸的是,它現在告訴我輸入字符串的長度必須是16的倍數。 –
CBC模式是一個塊,因此輸入應該是16的倍數,或者您應該爲輸入數據指定填充(通常爲PKCS#5)。 –