2013-12-23 123 views
1

我正在将系统从OpenCart迁移到Spree中,并且作为其中的一部分,我想无缝地迁移用户,以便他们可以在不更改密码的情况下保持登录状态。在ruby中验证OpenCart密码哈希

查看OpenCart代码我找到了网站的登录功能。我不是在PHP很大,所以我想了解如何重现红宝石

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代码实际上在做什么?

谢谢!

回答

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" 
+0

谢谢!这工作得很好。 – frankmt