0

我将“秘密”字符串作为散列存储在数据库中(以防数据泄露)。我正在使用 bcrypt,但发现它显然只需要前 55 个字符。基本上有人会尝试猜测这些秘密字符串,我目前将他们的猜测散列并将其与散列的“秘密”字符串进行比较。

最好的方法是什么?Bcrypt 将不起作用,因为某些字符串最多可包含 500 个字符。有任何想法吗?

4

3 回答 3

1

如果输入是可猜测的,不要只使用普通哈希(无论是 MD5、SHA-1 还是 SHA-2)。验证猜测对他们来说很便宜。

一个简单的技巧是首先使用 SHA-256 对输入进行哈希处理(将其减少到 32 个字节或 43 个 Base64 字符),然后对其应用 bcrypt。

这样,bcrypt 负责处理昂贵和加盐的问题,而 SHA-256 负责处理大量输入。

请参阅https://security.stackexchange.com/questions/30315/fixing-the-high-bit-problem-in-phps-crypt-implementation/30326#30326

于 2013-02-11T09:41:54.373 回答
0

您可以尝试使用Blowfish - 没有长度限制的对称加密算法。

PHP Pear 实现了Crypt_Blowfish类。

如果不需要解密能力,最好使用类似SHA1. PHP 也支持它

于 2013-02-11T05:38:29.527 回答
0

我是 MD5 的忠实粉丝,它比 SHA 更快,而且几乎不可逆。我用它来做整个文件作为校验和比较。此外,它是 PHP 中的内置函数。

只需对传入的字符串进行 MD5 处理,并将其与存储在数据库中的 MD5 化答案进行比较。

MD5 字符串只有 32 个字符长。虽然缩小数据库大小非常棒,但有可能两个长字符串实际上具有相同的 MD5 结果,但这是极不可能的。

于 2013-02-11T06:07:57.740 回答