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

时间:2012-07-02 06:57:07

标签: php ruby blowfish crypt

在PHP中,我们使用内置的crypt()函数生成一些密码哈希,以生成一个河豚哈希。

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

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

现在我用Google搜索并找到了crypt宝石,但似乎硬编码为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 `|'

有人知道我们如何在PHP中生成的红宝石中产生相同的河豚哈希?

1 个答案:

答案 0 :(得分:1)

BCrypt宝石可以满足我们的需求:

BCrypt::Engine.hash_secret("bob", "$2a$10$ ... salt here ...")