Php 使用不同加密迁移密码(CubeCart到Prestashop)

Php 使用不同加密迁移密码(CubeCart到Prestashop),php,prestashop,password-encryption,Php,Prestashop,Password Encryption,我将客户从CubeCart转移到Prestashop,并希望保留客户现有的客户密码 我在Prestashop论坛上找到了一篇文章,它似乎做了我需要做的事情,但是,ZenCart/OScommerce需要Prestashop。 因此,Passbrow结构有一点不同,我需要帮助,请参见以下内容: ZC/OSC 格式:1列,32个字母数字字符+冒号+2个字母数字字符。 例如 E56D6475F66A86996B54114BB4102BF:08 CC 格式:2列,32个字母数字字符+一个独立的6位随机字

我将客户从CubeCart转移到Prestashop,并希望保留客户现有的客户密码

我在Prestashop论坛上找到了一篇文章,它似乎做了我需要做的事情,但是,ZenCart/OScommerce需要Prestashop。 因此,Passbrow结构有一点不同,我需要帮助,请参见以下内容:

ZC/OSC
格式:1列,32个字母数字字符+冒号+2个字母数字字符。
例如
E56D6475F66A86996B54114BB4102BF:08

CC
格式:2列,32个字母数字字符+一个独立的6位随机字符。
例如
密码:E56D6475F66A86996B54114BB4102BF
盐:7pZcAF

因此,我希望获得一些帮助,使下面的代码适应2列CC password/salt:

// == BEGIN ZEN-CART / OSCOMMERCE TO PRESTASHOP PASSWORD INTEGRATION ==
// == BY João Cunha - this.person@joaocunha.eti.br
// == @ 31/03/2012
// == USE AND MODIFY AT WILL
// == TESTED ON PRESTASHOP V1.4.7X
if (!$result) { //<- INVALID PRESTASHOP LOGIN, IT MAY BE A ZEN-CART / OSCOMMERCE     PASSWORD
//CHECK IF THE GIVEN EMAIL MATCHES A ROW IN OUR LEGACY TABLE AND RETRIEVES THE LEGACY     PASSWORD
$resultZC = Db::getInstance()->getRow('
SELECT `password`
FROM `zc_legacy_passwords`
WHERE `email` = \''.pSQL($email).'\'
AND `updated` = 0');

 if (!$resultZC)
return false; //<- EMAIL NOT FOUND IN NONE OF THE TABLES, SO IT IS AN INVALID LOGIN

//ENCRYPTS THE GIVEN PASSWORD IN ZEN-CART / OSCOMMERCE FORMAT
$salt = substr($resultZC['password'], strrpos($resultZC['password'],':')+1, 2);
$ZCpassword = md5($salt . $passwd) . ':' . $salt;

if ($ZCpassword != $resultZC['password'])
return false; //<- WRONG ZEN-CART/OSCOMMERCE PASSWORD GIVEN

//WE'LL UPDATE THE CUSTOMER TABLE WITH ITS PRESTASHOP ENCRYPTED PASSWORD...
Db::getInstance()->Execute('
                        UPDATE `'._DB_PREFIX_   .'customer`
                        SET `passwd` = \''.md5(pSQL(_COOKIE_KEY_.$passwd)).'\'
                        WHERE `email` = \''.pSQL($email).'\'');

//...AND FLAG IT AS UPDATED, SO THE NEXT TIME HE LOGS IN, HE WON'T ENTER THIS ROUTINE.
Db::getInstance()->Execute('
                UPDATE `zc_legacy_passwords`
                SET `updated` = 1
                WHERE `email` = \''.pSQL($email).'\'');

//USER IS AUTHENTICATED, OVERWRITE THE EMPTY $result VARIABLE
$result = Db::getInstance()->getRow('
SELECT *
FROM `'._DB_PREFIX_ .'customer`
WHERE `active` = 1
AND `email` = \''.pSQL($email).'\'
AND `deleted` = 0
AND `is_guest` = 0');
}
// == END ZEN-CART / OSCOMMERCE TO PRESTASHOP PASSWORD INTEGRATION
/==开始ZEN-CART/OSCOMMERCE到PRESTASHOP密码集成==
//==由João Cunha-本。person@joaocunha.eti.br
// == @ 31/03/2012
//==随意使用和修改
//==在PRESTASHOP V1.4.7X上测试
如果(!$result){//getRow('
选择“密码”`
来自'zc_旧密码'`
其中`email`=\''.pSQL($email)。'\'
和`更新的`=0');
如果(!$resultZC)
返回false;//执行('
更新'zc_旧密码'`
设置`updated`=1
其中`email`=\''.pSQL($email.'\'');
//如果用户已通过身份验证,请覆盖空的$result变量
$result=Db::getInstance()->getRow('
挑选*
来自`.\u DB\u前缀\u客户`
其中'active`=1
和'email`=\'''.pSQL($email)。'\'
和“已删除”=0
和'is_guest`=0');
}
//==结束ZEN-CART/OSCOMMERCE与PRESTASHOP密码集成

此代码还将旧的salt密码更新为新的Prestashop密码类型。

这并不重要,因为这只是检查密码:

zc_legacy_passwords
WHERE
email
= \'.pSQL($email)。\'和
更新的
=0')

然后此代码检查表数据库ZenCart/OScommerce中的密码,您可以删除或注释(只需忽略)

$salt=substr($resultZC['password'],strrpos($resultZC['password'],':'))+1,2); $ZCpassword=md5($salt.$passwd)。“:”$盐

如果($ZCpassword!=$resultZC['password'])返回false

这一点很重要,因为它将存储和修改prestashop的密码(此处不需要modif)

Db::getInstance()->执行(' 更新
。\u DB\u PREFIX\u.'customer
SET
passwd
= \''.md5(pSQL(\u COOKIE\u KEY.$passwd)).\'WHERE
email
= \''.pSQL($email)。'\''

忽略这一点:

Db::getInstance()->执行('UPDATE
zc\u legacy\u passwords
SET
已更新
=1,其中
电子邮件
=\''.pSQL($email)。'\''

忽略这一点:

$result=Db::getInstance()->getRow('SELECT*FROM
')。\u Db\u前缀_
.“客户
其中
活动
=1和
电子邮件
=\''.pSQL($email)。\'和
已删除
=0且
为_guest
=0')

因此,代码如下所示:

如果(!$result){

Db::getInstance()->Execute('UPDATE
。'Db\U PREFIX\uCustomer
SET

passwd
=\'.md5(pSQL(\u COOKIE\u KEY.$passwd)).\'其中
email
=

\''.pSQL($email)。'\''

}


用不同的加密方法迁移密码是非常困难的,甚至是不可能的。所以,对于你的问题来说可能太晚了,我认为任何想要迁移密码的人都应该尝试一种可用的方法来自动移动密码。这个工具不需要你有任何技术技能,只需要简单的点击。这是我的建议之一。当然你需要付一点钱,但也不算太多。

uh你不需要先使用原始密码吗?我们不能简单地反转md5散列。更新您的新代码以使用旧代码使用的相同密码检查和生成代码,因为您无法执行其他操作。是的,我有原始encrypred密码。上述代码更新了新代码,但采用Zen Cart/OScommerce格式。我需要帮助修改上述代码以更新新代码CubeCart(CC)代码。您需要原始的未加密密码。我不明白您为什么需要未加密密码-您是否只需对加密密码进行哈希运算,然后使用这些两次哈希的密码进行保存/验证?谢谢hendrathings。这可用于更新密码,但不会通过旧的加密方法检查密码。我想做的是首先检查旧加密方法中的密码(salt+密码),然后如果匹配,更新密码。hemn,你的cubecart是什么版本?如果我不知道encription md5/sha1try的用途,我不确定是否检查:
if(hash('whirlpool',$salt.$value.$salt))返回false
$value
更改为客户未加密密码,将
$salt
更改为您的salt设置。如果未设置salt,请尝试
substr(str_pad(dechex(mt_rand()),8,'0',str_pad_LEFT),-8)
要创建salt,请在cubecart版本5中使用此默认值。