生成跨平台兼容的河豚哈希(PHP / Ruby)


Generate cross-platform compatible Blowfish hash (PHP/Ruby)

在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 ...")