在PHP中匹配128个字符的密码哈希-用Ruby on Rails加密


Matching 128 character password hash in PHP - encrypted with Ruby on Rails

我们有一个用Ruby on Rails构建的网站。用户注册通过Ruby中的站点进行处理,密码使用SHA1进行散列。Ruby的HexDigest函数,对每个用户使用不同的盐。我需要做的是-在PHP中创建一个web服务,将登录用户已经在网站上注册。为此,我需要从用户输入生成一个相同的哈希值。由于我对Ruby几乎一无所知,所以我做了很多关于如何用PHP复制相同内容的研究。我浏览了下面的链接,但无济于事。如何在PHP中生成密码,就像它在Ruby on Rails中使用的那样

Ruby还会对输入进行多次处理/哈希运算(即伸展,正如你在Ruby中所说的那样)。

保存在数据库中的散列长度为128个字符。Salt长度为20个字符。

不知道是否还有某种胡椒。

,

用户输入= 123456salt = g0i3A51x0xa7wrfWCMbG

数据库密码(128 char hash) = 5374f9853f96eaa5b3c1124f9eb1dbbb63fb5c5ce40abb41ec88c745ec3455328685f3046cac8c356a4d81dbd315fd09173c54dc94a4208e5bc091776b02eb77

如果有人可以用PHP复制相同的哈希,使用上述给定的用户输入和盐,那么请分享代码。请帮助。这对我们很有帮助。

感谢
class Sha1 < Base
      # Gererates a default password digest based on stretches, salt, pepper and the
      # incoming password.
      def self.digest(password, stretches, salt, pepper)
        digest = pepper
        stretches.times { digest = self.secure_digest(salt, digest, password, pepper) }
        digest
      end
    private
      # Generate a SHA1 digest joining args. Generated token is something like
      #   --arg1--arg2--arg3--argN--
      def self.secure_digest(*tokens)
        ::Digest::SHA1.hexdigest('--' << tokens.flatten.join('--') << '--')
      end

我将从一个更简单的哈希例程开始,拉伸和盐是很好的,但没有这些,在两边做一个简单的哈希,看看你是否能让它们排成一行。然后你可以稍后再加盐/拉伸。

在ruby端以如下开头:

 require 'digest/sha1'
 Digest::SHA1.hexdigest(string)

当你不能解密时,你必须对两边都进行哈希并比较结果。

如果你真的想加密一些东西然后解密,试试这个:

http://jnylund.typepad.com/joels_blog/2007/11/cross-language-.html。

以上Ruby代码的直接翻译是:

function hashPassword($password, $stretches, $salt, $pepper) {
    $digest = $pepper;
    for ($i = 0; $i < $stretches; $i++) {
        $digest = sha1("--$salt--$digest--$password--$pepper--");
    }
    return $digest;
}

要使用SHA-512(128十六进制数字输出)而不是SHA-1(40十六进制数字输出),将sha1(...)替换为hash('sha512', ...)

我无法根据您发布的散列检查此代码,因为"胡椒"是我不知道的秘密配置设置。