【发布时间】:2013-01-22 06:30:15
【问题描述】:
我正在尝试编写一个简单的 Python 解决方案来使用密码安全地加密文件。我想我会使用bcrypt 或pbkdf2 之类的东西,这样随着时间的推移,我可以让我的密码哈希值越来越难以被暴力破解。我还想我会使用 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 将其丢弃,这样做是否存在潜在的安全风险?我不会这么想,但话又说回来,我不是密码学家。
【问题讨论】:
标签: python encryption aes bcrypt sha256