我正在针对Prestashop Web服务开发来自angular和ionic3的登录名。我可以访问网络api,并且通话正常。 问题是我已经搜索了如何加密用户针对prestashop输入的密码,但密码不匹配。
我已经阅读了很多文章,并且我知道prestashop的工作方式是对md5密码进行加密,并在密码后面加上密码。 为:
md5(_cookier_key_ + userPassword)
我尝试像上一个示例一样对我的密码进行加密(我有_cookier_key_ +我的密码),md5加密的结果如下: f01e5b4d319dba0b6d41ec601d7720fd
但是在我的prestashop webapi中,它显示的密码相同: $ 2y $ 10 $ 36OeM33DN5zqrKWMnXqgz.RDzVorpZDl3do3UaRuhwDhlXsOh.jwO
哪种类型的加密会生成$和。 ?
我可以看到我的prestashop的某些用户的密码由md5组成,如下所示: 0367d421dd907a86d980a69dbb033589 但其他客户的密码如下: $ 2y $ 10 $ I5OGoI4HcqGTyee9W5Hvt.5fu / sJnH8I8dv9UoL38s.v1oqhhGyaO
发生了什么事?
提前一千次感谢
答案 0 :(得分:0)
正如您在Hashing.php中所看到的,Prestashop使用bcrypt作为密码哈希函数,因此您在数据库的密码列中看到的字符串是应用它的结果。
为了检查离子密码是否正确,必须使用bcrypt验证程序功能。所以放手吧:
1-在您的离子项目中安装bcryptjs
npm install bcryptjs --save
npm install @types/bcryptjs --save
2-将bcrypt导入您要检查密码的.ts文件中
import * as BcryptJS from "bcryptjs";
3-检查密码:
示例:$ 2y $ 10 $ pUxl49suKpBXDYzXfDf7x.E2n9xyP7OWKrTs3jWxkX1C / ml10lypK-> prestashop生成的字符串,并以'admin'密码存储在数据库中
BcryptJS.compareSync('admin', '$2y$10$pUxl49suKpBXDYzXfDf7x.E2n9xyP7OWKrTs3jWxkX1C/ml10lypK'); // returns true
BcryptJS.compareSync('test', '$2y$10$pUxl49suKpBXDYzXfDf7x.E2n9xyP7OWKrTs3jWxkX1C/ml10lypK'); // returns false
答案 1 :(得分:0)
是的,谢谢@alanjs
实际上,我已经找到了解决方案,但是如果有更多的人发现问题,我还没有时间进行自我解答。
在Prestashop中,由于md5不再安全,因此有两种加密类型。 MD5和BCrypt。未更改密码的旧用户的密码使用md5加密,新用户使用BCrypt加密。
问题是我无法访问prestashop代码,因此无法看到正在使用的加密方法。
无论如何,非常感谢,您所描述的步骤正是我在另一篇文章中所找到的以及有效的步骤。