首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解密magento企业版密码?

如何解密magento企业版密码?
EN

Stack Overflow用户
提问于 2012-11-30 18:43:19
回答 5查看 17.6K关注 0票数 8

我刚刚注意到magento企业版和社区版都使用不同的算法来存储密码。我知道社区版使用md5。谁能告诉我企业版使用的是哪种机制,如果我们想迁移到社区版,我们如何解密企业密码?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-12-20 11:24:16

我想它在你的app/etc/local.xml或者Magento EE的app/etc/enterprise.xml

Magento企业版上的解密功能

代码语言:javascript
复制
/**
 * Decrypt a string
 *
 * @param string $data
 * @return string
 */
public function decrypt($data)
{
    return str_replace("\x0", '', trim($this->_getCrypt()->decrypt(base64_decode((string)$data))));
}

代码语言:javascript
复制
/**
 * Instantiate crypt model
 *
 * @param string $key
 * @return Varien_Crypt_Mcrypt
 */
protected function _getCrypt($key = null)
{
    if (!$this->_crypt) {
        if (null === $key) {
            $key = (string)Mage::getConfig()->getNode('global/crypt/key');
        }
        $this->_crypt = Varien_Crypt::factory()->init($key);
    }
    return $this->_crypt;
}

在企业版或社区版上似乎也有相同的功能。您应该向Magento企业版的所有者询问脚本密钥,并使用CE对其进行解密。这是很好的,因为我偷偷进入Magento企业版的代码,代码与社区版(用于加密/解密)相同。

在注释1之后添加:

代码语言:javascript
复制
/**
 * Hash a string
 *
 * @param string $data
 * @return string
 */
public function hash($data)
{
    return md5($data);
}

/**
 * Validate hash against hashing method (with or without salt)
 *
 * @param string $password
 * @param string $hash
 * @return bool
 * @throws Exception
 */
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.');
}
票数 14
EN

Stack Overflow用户

发布于 2012-11-30 23:51:56

散列是单向加密。你不应该能解密密码的。

密码的基本操作:

  1. 客户注册帐户并输入密码。系统添加盐,对密码进行加密,并将生成的密码散列存储在数据库中。
  2. 客户登录,输入密码。系统添加盐,对密码进行加密,并将生成的密码散列与存储的密码散列进行比较。当散列相等时,登录系统知道客户知道密码,而实际上不知道密码本身。

因此,如果一个系统使用SHA1,而另一个系统使用旧的、过期的MD5,您可以将密码重新输入系统的唯一方法是让客户重新输入密码,以便调用新的哈希算法并存储新的哈希。

您有了Enterprise源代码,编写了一个使用Enterprise散列函数来存储和比较密码的模块,您将拥有一个具有更新的、安全增强的方法来存储密码的CE,并且应该能够从旧站点带来密码散列。

一些其他信息:

在Mage_Core_Model_Encryption类中可以找到使用的加密方法。

感兴趣的三个函数是:

  1. public function hash($data)
  2. public function getHash($password, $salt = false)
  3. public function validateHash($password, $hash)

1.7.x.x中的函数代码

代码语言:javascript
复制
public function hash($data)
{
    return md5($data);
}

代码语言:javascript
复制
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;
}

代码语言:javascript
复制
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和企业版都使用相同的例程,当您拥有企业代码时,您必须对其进行检查。

更改app/etc/local.xml文件中的加密密钥以匹配Enterprise版本中的密钥,然后将Enterprise数据导入CE数据库将允许访问加密数据。然而,密码被存储为散列(参见上面的功能块),因此是不可逆的。local.xml中存储加密密钥的相关部分:

代码语言:javascript
复制
<crypt>
    <key>< ![CDATA[-encryption-key-here-]]></key>
</crypt>
票数 12
EN

Stack Overflow用户

发布于 2012-12-19 22:04:45

我们还使用了不同密码算法的不同系统。我们所做的确实像Fiasco所说的那样:

->编写一个覆盖Magento_Core_Model_Encryption的自定义模块,并更改hash函数以匹配加密密码的算法。

在模块配置中:

代码语言:javascript
复制
<global>
  <helpers>
    <core>
      <encryption_model>MyCompany_Module_Model_Encryption</encryption_model>
   </core>
 </helpers>
</global>
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13643618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档