1

在 PHP 中,我们使用内置的crypt()函数生成一些密码散列来生成河豚散列。

<?php $hash = crypt("secure password", '$2a$10$ ... salt here ... $');

我看到 ruby​​ 有String#crypt,但我们得到的输出完全不同(更短的哈希)。查看手册页crypt (3),只有一些 Linux 发行版向 glibc 添加了河豚支持,所以我认为 ruby​​ 不支持它。

现在我用谷歌搜索并找到了cryptgem,但它似乎被硬编码为 2^16 个周期而不是我们使用的 2^10 个周期。它还在 ruby​​ 1.9.3 中给了我一个例外:

Crypt::Blowfish.new("abc").encrypt_block("foo")
TypeError: can't convert String into Integer
from /Users/chris/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/crypt-1.1.4/crypt/blowfish.rb:47:in `|'

有人知道我们如何在 ruby​​ 中生成与在 PHP 中生成的相同的河豚哈希吗?

4

1 回答 1

1

BCrypt gem 可以满足我们的需要:

BCrypt::Engine.hash_secret("bob", "$2a$10$ ... salt here ...")
于 2012-07-02T08:10:58.417 回答