使用 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 数据库进行全站登录的密码加密的主要内容,如果未能解决你的问题,请参考以下文章