我一直在阅读有关密码存储的内容,基本上发现了两种常用的技术。
- 使用单个 key 对存储的所有密码进行加密。
- 使用哈希值
- 使用带盐的哈希值。
存储“自行加密”的密码是否存在缺陷,即使用密码 password1
加密显示 password1
的 txt,而不将其未加密存储,并且当用户想要登录、解密、比较并授予访问权限(或不)?
我对这个话题不太了解,所以有人可以启发我吗?
最佳答案
与使用带盐的哈希值相比,这有三个缺点。
- 它很容易受到字典攻击:任何掌握您密码文件的人都可以尝试常用密码(例如
password1
),并查看它们是否自加密到存储的密码值(value)。更糟糕的是,根据您进行加密的方式,这可以在获取密码文件之前离线完成,并将结果存储在查找表中,以便当有人获取您的文件时可以立即破解它。 - 它需要可变的存储量,这对数据库不太友好。哈希具有固定长度的输出,但加密长度随输入的长度而变化。
- 它不容易被迭代。真正正确的方法是使用带盐的哈希,但要迭代该函数几千次(即,哈希,然后再次哈希,然后再次哈希......)。这意味着验证密码仍然可以在一两秒内完成(取决于您散列的次数),这通常不会有问题;但破解起来要困难得多,因为你现在尝试的每个密码都需要经过数千次哈希处理。这里没有明显的方法来做到这一点,因为加密可能会增加长度(当您添加初始化向量等时)。
真的,当有一种可靠且完善的技术可以做得更好时,根本没有理由这样做。
关于security - 密码自加密可行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26536783/