我正在编写一个简单的文件加密程序。主要作为学术练习,但可能供将来认真使用。所有繁重的工作都由第三方库完成,但以安全的方式将各个部分组合在一起对于非密码学家来说仍然是一个相当大的挑战。基本上,我已经按照我认为应该的方式进行了所有工作。
我使用 128 位 AES 进行加密,密钥长度为 128 位。我希望用户能够输入可变长度的密码,所以我决定用 MD5 对密码进行哈希处理,然后使用哈希作为密钥。我认为这是可以接受的——密钥总是应该是秘密的,所以没有理由担心碰撞攻击。
现在我已经实现了这个,我遇到了几篇文章,表明这是一个坏主意。我的问题是:为什么?如果选择了一个好的密码,密码本身应该足够强大,除非通过非凡的(阅读:目前不可行的)蛮力努力,否则永远不会泄露密钥,对吧?我应该使用 PBKDF2 之类的东西来生成密钥,还是对于除了最极端的加密应用程序之外的所有应用程序来说都是过度杀伤力?