Php 在ruby中验证OpenCart密码哈希

Php 在ruby中验证OpenCart密码哈希,php,ruby,opencart,Php,Ruby,Opencart,我正在用ruby将一个系统从OpenCart迁移到Spree,作为其中的一部分,我想无缝地迁移用户,这样他们就可以在不更改密码的情况下继续登录 查看OpenCart代码,我找到了该网站的登录功能。我不擅长PHP,所以我试图理解如何在ruby中重现以下内容 SHA1(CONCAT(salt, SHA1(CONCAT(salt, SHA1('" . $this->db->escape($password) . "'))))) 我尝试了以下方法,但没有成功: Digest::SHA1.h

我正在用ruby将一个系统从OpenCart迁移到Spree,作为其中的一部分,我想无缝地迁移用户,这样他们就可以在不更改密码的情况下继续登录

查看OpenCart代码,我找到了该网站的登录功能。我不擅长PHP,所以我试图理解如何在ruby中重现以下内容

SHA1(CONCAT(salt, SHA1(CONCAT(salt, SHA1('" . $this->db->escape($password) . "')))))
我尝试了以下方法,但没有成功:

Digest::SHA1.hexdigest("#{salt}#{Digest::SHA1.hexdigest("#{salt}#{Digest::SHA1.hexdigest(" . #{password . ")}")}")
我当前的测试用例是:

  • 密码:7fe391813e
  • 盐:e4e91e33a
  • OpenCart散列(我正在尝试获取):2e62a3b86da5ce878895bcc5745725493bde7ef0
以前有人做过同样的迁移吗?或者有人能解释一下PHP代码实际上在做什么吗


谢谢

OpenCart代码是一个MySQL语句,PHP仅用于构造它。您的Ruby替代方案很接近,问题在于密码包含,点仅在PHP中使用。这是正确的一个:

Digest::SHA1.hexdigest("#{salt}#{Digest::SHA1.hexdigest("#{salt}#{Digest::SHA1.hexdigest(password)}")}")

irb(main):001:0> password = "7fe391813e"
=> "7fe391813e"
irb(main):002:0> salt = "e4e91e33a"
=> "e4e91e33a"
irb(main):005:0> Digest::SHA1.hexdigest("#{salt}#{Digest::SHA1.hexdigest("#{salt}#{Digest::SHA1.hexdigest(password)}")}")
=> "2e62a3b86da5ce878895bcc5745725493bde7ef0"