在ruby中验证OpenCart密码哈希

时间:2013-12-23 08:46:54

标签: php ruby opencart

我正在将系统从OpenCart迁移到Ruby中的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代码实际上在做什么吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

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"