使用 opencart 数据库进行全站登录的密码加密

Posted

技术标签:

【中文标题】使用 opencart 数据库进行全站登录的密码加密【英文标题】:Password Encryption Using opencart database for sitewide login 【发布时间】:2015-05-06 01:35:40 【问题描述】:

您好,希望我能指出正确的方向并获得一些清晰,因为我现在很困惑。

我有一个网站也附有 opencart(版本 1.5.6.1),两者的样式看起来相同。我已经到了需要用户登录我网站上的服务的地步,但是我真的不希望用户创建两组数据,一组用于商店,另一组用于我的服务。我做了研究,发现我可以将信息添加到 opencart 数据库中,而不是拥有两个独立的数据库。

在我开始密码加密之前一切都很顺利,opencart(显然)使用“salt sha1”加密

我在网站上使用的工具有这个代码(md5 加密):

$crypt_pwd = md5($password);

我知道我在这里问的是相对愚蠢的问题,但是我如何在我的网站代码中添加对相同加密的支持?即使只是指向正确方向的指针也会有所帮助:)

【问题讨论】:

【参考方案1】:

实际上,Opencart 支持这两种方案,因此您只需在客户表中使用 md5 散列密码就可以了。在这种情况下,您可以简单地将盐留空。

作为参考,看看system/library/customer.php 中的login() 方法中使用的这个查询,这是验证登录的地方:

SELECT * FROM customer
WHERE LOWER(email) = '" . $this->db->escape(utf8_strtolower($email)) . "' 
    AND
    (
        password = SHA1(CONCAT(salt, SHA1(CONCAT(salt, SHA1('" . $this->db->escape($password) . "')))))
        OR password = '" . $this->db->escape(md5($password)) . "'
    )
    AND status = '1'
    AND approved = '1'

请注意,数据库字段与带盐的 SHA1 或 md5 散列版本匹配。

【讨论】:

您好,感谢您抽出宝贵时间回答,但是您的回答有一个问题,我一直在玩这个一整天都无济于事,我仍然有一个问题:S(我不是程序员)如果我在我的网站上创建了一个登录名,我可以使用相同的信息登录到 opencart,但是如果我使用 opencart 创建一个登录名,它会“加盐”,我无法使用该用户的详细信息登录我的网站.我尝试添加或 $crypt_pwd = SHA1($password);那什么也没做:(我不认为我真的理解这个盐的东西以及它从哪里得到它的价值:s抱歉lol 我的建议是修改 opencart 插入以严格使用 md5 哈希和/或重定向流量,以便所有注册都在一个页面上进行。看看/catalog/model/account/customer.php - 特别是addCustomer()editPassword() 方法。在那里,您可以将查询更改为 password = '" . $this->db->escape(md5($password)) . "'salt = ''。希望这对你有意义。【参考方案2】:

http://php.net/manual/en/function.sha1.php

$encrypted = sha($passphrase);
//or 
$salt = "my secret salt ASF8908sjQ@Te8u";
$encrypted = sha($salt . $passphrase);

【讨论】:

以上是关于使用 opencart 数据库进行全站登录的密码加密的主要内容,如果未能解决你的问题,请参考以下文章

怎么在opencart后台设置用户权限

如何在opencart中的用户级别应用权限

登录加密

Android指纹API加解密

如何修改opencart的模版适合为mycncart系统使用

pigx数据库密码怎么加解密