在PHP中,我们使用内置的crypt()函数生成一些密码哈希来生成河豚哈希。
<?php $hash = crypt("secure password", '$2a$10$ ... salt here ... $');
我看到 ruby 有 String#crypt,但我们得到的输出完全不同(哈希要短得多)。 查看手册页的crypt (3)
,只有一些Linux发行版为glibc添加了河豚支持,所以我假设Ruby不支持它。
现在我用谷歌搜索并找到了crypt
gem,但它似乎是硬编码的,可以执行 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 中生成的相同的河豚哈希?
BCrypt gem 可以满足我们的需要:
BCrypt::Engine.hash_secret("bob", "$2a$10$ ... salt here ...")