Nic*_*kiy 6 encryption cryptography aes sha bcrypt
我从一个弱密码(前8个小写字符)和一个文件开始.我需要使用该密码加密该文件.结果必须能够抵御已知攻击.
方法1:我可以使用SHA-256散列密码,然后使用生成的散列和文件作为AES-256的输入,给我一个加密文件.据我所知,SHA-256和AES-256都非常快.这不会使文件容易受到暴力攻击吗?
例如,可以抓住预先计算的SHA-256哈希的彩虹表,假设它的文件非常小并且密码非常弱,请尝试在合理的时间内使用该表中的每个哈希进行AES-256解密(一些几个月的专业硬件).
方法2:使用bcrypt.如果我理解正确,bcrypt比SHA-256 + AES-256更适合加密文件,因为它的密钥生成方案有一个工作因素,导致更强的密钥.还是我错了?
我见过的Ruby和Python实现(包装器?)专注于使用bcrypt作为密码的散列方案,而不是密码本身.我甚至可以使用bcrypt来散列弱传递并在"一步"中加密文件吗?
方法3:使用bcrypt散列传递,使用该散列和文件作为AES-256的输入,给我加密文件.这样可以解决"密钥太快而无法生成"的问题.(假设它有问题.)但是,bcrypt哈希长448位,AES-256需要256位密钥.天真的解决方案是简单地删除散列的尾随位并将其用作AES-256的密钥.我不会走这条路,因为我对密码学知之甚少,不知道后果是什么.
编辑:我不能限制通行证,因为这是一个离线应用程序.即.没有合理的地方储存盐.我可以将通道加盐,并将未加密的盐与加密文件一起存储.如果说数据库受到损害,盐几乎就是公共的/可见的.盐的目的是防止彩虹表攻击.感谢Nemo,吼叫.
Nem*_*emo 12
方法4:使用PKCS#5(PBKDF2用于从传递中获取密钥+使用该密钥进行加密的密码),最好是其他人的实现.
不要忘记盐.(您将它与加密数据一起存储.它只需要8个字节左右.)