哈希是一种加密方式。您不应该能够解密密码。
密码的基本操作:
客户注册帐户并输入密码。系统添加盐,加密密码并将生成的密码哈希存储在数据库中。
客户登录,输入密码。系统添加盐,加密密码并将生成的密码哈希与存储的密码哈希进行比较。当哈希值相等时,登录系统知道客户知道密码,而实际上并不知道密码本身。
因此,如果一个系统使用 SHA1 而另一个系统使用旧的、过期的 MD5,则将密码重新输入系统的唯一方法是让客户重新输入密码,以便调用新的哈希算法并获得新的哈希存储。
您拥有 Enterprise 源代码,编写一个使用 Enterprise 散列函数来存储和比较密码的模块,您将拥有带有更新的、安全增强的方法来存储密码的 CE,并且应该能够带来密码散列从旧网站上移过来。
一些附加信息:
使用的加密方法可以在 Mage_Core_Model_Encryption 类中找到。
三个感兴趣的函数是:
public function hash($data)
public function getHash($password, $salt = false)
public function validateHash($password, $hash)
来自 1.7.x.x 的功能代码
>
public function hash($data)
{
return md5($data);
}
>
public function getHash($password, $salt = false)
{
if (is_integer($salt)) {
$salt = $this->_helper->getRandomString($salt);
}
return $salt === false ? $this->hash($password) : $this->hash($salt . $password) . ':' . $salt;
}
>
public function validateHash($password, $hash)
{
$hashArr = explode(':', $hash);
switch (count($hashArr)) {
case 1:
return $this->hash($password) === $hash;
case 2:
return $this->hash($hashArr[1] . $password) === $hashArr[0];
}
Mage::throwException('Invalid hash.');
}
似乎 CE 和 Enterprise 都使用相同的例程,您必须检查一下,因为您有 Enterprise 代码。
更改 app/etc/local.xml 文件中的加密密钥以匹配企业版本中的密钥,然后将企业数据导入 CE 数据库将允许访问加密数据。密码虽然存储为散列(参见上面的功能块)并且因此是不可逆的。 local.xml 中存储加密密钥的相关部分:
<crypt>
<key>< ![CDATA[-encryption-key-here-]]></key>
</crypt>