从数据库中检索magento中的客户密码

时间:2013-01-11 06:49:17

标签: database django zend-framework magento passwords

我已将我的项目网站从magento迁移到django,这是一个拥有数百万用户的网站。我已经成功导入了网站上的所有数据,但我遇到的主要问题是迁移客户数据库,尤其是密码,因为很明显我无法为django网站上的每个客户提供新密码,因为它会非常耗时。并且对于客户重置密码,将非常恼人,许多客户将从网站上丢失。

请告诉我如何从数据库中检索magento中的客户密码?

5 个答案:

答案 0 :(得分:3)

您无法恢复密码。 Magento使用哈希与盐来存储密码(md5和sha1根据版本)。

只有您可以做的事情 - 重置密码或在您的网站中实现相同的功能来检查密码,就像在magento中完成一样。

答案 1 :(得分:1)

乍一看,似乎django使用md5${salt}${hashed_password}存储密码,并且它们会添加盐。在这种情况下,您应该能够获取Magento密码并重新格式化字符串,以便它通过django密码检查。

$hashArr = explode(':', $hash);
$newPasswordString = 'md5$'.$hashArr[1].'$'.$hashArr[0];

此答案的可行性/准确性取决于您使用的是社区/专业还是企业。该代码基于社区代码,因为我可以更自由地分享这些代码,具体取决于企业可能会或可能不会实现,您需要检查Mage_Core_Model_Encryption:validateHash

答案 2 :(得分:1)

如果您保留旧系统中的旧漏和弱磁,则会危及您的用户。

如果某个攻击者(或某些邪恶的管理员)可以访问哈希和用户数据,他可以轻松破解它们(请参阅例如http://hashcat.net/oclhashcat-plus/)并在全局范围内对用户使用的任何服务进行攻击(当然用户)建议不要重复使用密码,使用强密码等,但许多人不会知道或忽略这一点。)

除了 bcrypt,pbkdf2,shaXXX_crypt之外,弱哈希与任何有关。甚至像随机盐渍的sha256这样的东西也必须被认为是弱的。

所以,理智的程序可能是:

  1. 不要直接支持弱哈希
  2. 导入弱哈希,但使用强算法再次哈希:强(弱(明文))
  3. 在登录时,将双线段内容升级为强(明文)
  4. 在此模式下运行系统一段时间,您的常用用户将在某段时间内拥有强大的(明文)哈希值。
  5. 要摆脱内部的weak()哈希,使所有此类哈希失效(这只会影响您的不常用户),向用户发送密码重置链接以及一些有关问题的联系信息。在电子邮件中,您可以指出您非常关心安全性,并且需要重置才能改进安全性。如果不常用户仍然对您的服务感兴趣,他将只重置他的密码。如果他不再感兴趣,他将忽略该电子邮件。在任何情况下,您的密码存储中都不会有双线点,而只是一个无效的。[/ li>
  6. 禁用对内部weak()哈希的支持,以便在站点配置中进行双重哈希。
  7. 不赞成在软件中支持内部哈希/双重哈希。
  8. 稍后,删除对软件内部哈希/双重哈希的支持,以简化它。
  9. 注意:如果遗留系统存在安全漏洞,则不必选择旧哈希,因为您必须考虑要泄露的密码。

答案 3 :(得分:0)

这可能是你的任务指南:

How to decrypt magento enterprise edition password?

答案 4 :(得分:0)

Cags的答案对我有用。我正在从Magento社区版1.7迁移到Django-Oscar。

我只有几百个用户可以移动,但重置密码不是一种选择。

为方便起见......

他的代码的python版本:

hash = xxxxxxxxxxxxxxxxx:xx  # The hash from Magento DB table customer_entity_varchar
splithash = hash.split(':')
djangopass = 'md5$' + splithash[1] + '$' + splithash[0]