使用像md5这样的散列算法,我们会遇到有限的熵,这意味着很长的密码可能会导致哈希值,这些哈希值可以通过较短的密码重新生成。
我当时想知道在服务器上存储使用公钥/私钥加密的公钥加密的密码是否是个好主意。由于不需要解密,因此可以丢弃密钥以避免在服务器遭到入侵时丢失密码。
然而,这种方法似乎没有被广泛使用。那么有缺点吗?如果是,那么哪个?
答案 0 :(得分:3)
有几个缺点。其中:
通常,当您必须知道其他内容的密码时,您只选择加密而不是哈希 - 例如,当您使用它代表用户登录其他系统时。理想情况下,你首先要耗尽所有其他可能性。
答案 1 :(得分:1)
总是存在这样的缺点:计算加密哈希比使用公钥加密算法加密小密码要便宜得多。
其次,您仍然受到公钥加密的有限熵的影响,您的位串仍将受到限制。如果您需要更多位,请使用内部状态更大的哈希值(SHA-512,Whirlpool等...)
第三,您需要将公钥与密码一起存储,这会导致相当大的存储成本(考虑到公钥的大小),以及您是否考虑对所有密码使用相同的公钥,不要 - 如果该密钥被泄露,那就结束了。
另一个考虑因素:没有密码大小限制,甚至填充块加密也会导致不同密码的存储大小不同,这可能会使数据库索引变得更加困难(可能不是一个大问题,但要保持记住)。
最后,biggie - 哈希意味着明确地破坏输入数据中的所有结构,这正是您在存储验证密码时所需要的。加密算法不这样做 - 它们会对数据进行转换,使其无法理解而没有正确的密钥,这与您尝试使用它的方式相悖。
所以,不,不应该使用这种方法,因为它是弄巧成拙的。使用内部状态更大的哈希值。