我正在寻找强大的单向散列函数来加密(真的)弱密码(10 ^ 9组合)。 crypt函数也必须满足一些要求:
Al相同的明文相同。所以scrypt / bcrypt和公钥/私钥方法是不可能的(或者我可能在这里错了吗?)。
AES中没有共享密钥。因为必须由不同的客户创建相同的哈希值。
无盐
那么可以做些什么来增加对这么小的角色空间进行强制攻击的难度呢?我已经尝试了多轮SHA256的按键拉伸,但我不是需要多少轮来显着增加计算时间(我猜想必须达到数十亿)。 到目前为止,我唯一想到的是使用服务器端密码,它被添加到密码中。但是在腐败的情况下,很难保证这个秘密仍然是秘密...... 我会很高兴得到一些提示或想法! 问候, r0cks
答案 0 :(得分:1)
仅使用算法是不可能的。最好将系统拆分为具有特定角色的部分,以保护您的数据。
scrypt,bcrypt和PBKDF2都是确定性的基于密码的密钥派生函数(PBKDF)。只要盐保持不变,它们就会为相同的输入重现相同的结果。 (部分)盐可能是服务器端的秘密。如果盐被暴露,那么如果密码很弱,这些功能将无济于事。
答案 1 :(得分:1)
没有更多的背景,给出一个好的答案并不容易。
服务器端密钥只能保护id(?)以存储服务器端(数据库)。即使这样,只要不知道秘密(每次双向加密的问题),它只保护id。
即使代码和数据库被盗,另一方的单向哈希也会保护ID。即使使用静态盐,BCrypt / PBKDF2哈希也会降低强制执行速度,但静态盐将允许构建一个彩虹表以立即获取所有哈希值。
使用BCrypt然后使用服务器端密钥加密哈希可能是你最好的选择,尽管如果不了解更多场景就很难说。