需要散列多达500个字符的字符串(想想密码式加密),这将很难逆转


Need to hash up to 500 char string (think password style encryption), that would be difficult to reverse

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

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

如果输入可以猜测,不要只使用纯散列(可以是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

您可以尝试使用Blowfish对称加密算法,不受长度限制。

PHP-Pear实现了Crypt_Blowfish类。

若不需要解密能力,那个么最好使用类似SHA1的东西。PHP也支持它。

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

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

MD5字符串只有32个字符长。虽然他在降低数据库大小方面做得很好,但有可能两个长字符串实际上会有相同的MD5结果,但这是极不可能的。