我想在数据库中存储一个散列密码(使用BCrypt)。什么样的类型比较好,什么样的长度比较正确?密码哈希与BCrypt总是相同的长度?

EDIT

示例散列:

2a美元,10美元KssILxWNR6k62B7yiX0GAe2Q7wwHlrzhF3LqtVvpyvHZf0MwvNfVu美元

在哈希一些密码之后,BCrypt似乎总是生成60个字符的哈希。

编辑2

抱歉没有提到实现。我正在使用jBCrypt。

Coda Hale的文章“如何安全存储密码”声称:

Bcrypt内置盐,以防止彩虹表攻击。

他引用了这篇论文,其中说在OpenBSD的bcrypt实现中:

OpenBSD从arcfour生成128位bcrypt盐 (arc4random(3))密钥流,在内核中播种随机数据 从设备计时收集。

我不明白这是怎么回事。在我对盐的概念中:

对于每个存储的密码,它都需要是不同的,这样就必须为每个密码生成一个单独的彩虹表 它需要存储在某个地方,以便它是可重复的:当用户试图登录时,我们获取他们的密码尝试,重复与最初存储密码时相同的盐和哈希过程,并进行比较

当我使用bcrypt的设计(Rails登录管理器)时,数据库中没有盐列,所以我很困惑。如果盐是随机的,并且没有存储在任何地方,我们如何可靠地重复哈希过程?

简而言之,bcrypt如何具有内置盐?

我经常听到这样的建议:“使用bcrypt在PHP中存储密码,使用bcrypt规则”。

但是bcrypt是什么?PHP并没有提供任何这样的函数,维基百科上有关于文件加密实用程序的喋喋不休,网络搜索只显示了一些不同语言的Blowfish实现。现在Blowfish也可以通过mcrypt在PHP中使用,但这如何帮助存储密码呢?河豚是一种通用密码,有两种工作方式。如果可以加密,就可以解密。密码需要单向哈希函数。

怎么解释呢?