0

我有一个安装了 woo commerce 的网站。我目前将其用作在线商店。但是,我想制作网站的应用程序版本,以便人们可以在应用程序和网站上注册、登录和购买东西。

所以我想我必须像 woo commerce 加密它一样加密用户密码,以便从应用程序发送的密码与通过 woo commerce 发送的密码具有相同的哈希值。

问题是我不知道 woo commerce 如何加密他们的密码,我尝试搜索它但没有得到任何东西。

尽管我有预感 WordPress 和 Woo commerce 以相同的方式加密密码,直到我使用相同的密码创建了两个帐户,一个通过 WordPress 和一个通过 woo commerce 并且它们的哈希值在我的数据库中出现不同。

如果有人可以帮助我弄清楚如何拥有两个相同的密码哈希器,最好不要取消我已经拥有的 woo 商务登录系统,我将不胜感激。

或者:如果有人可以告诉我 woo commerce 用来加密他们的密码的 php 文件在哪里,那也太棒了!

提前致谢。

4

2 回答 2

2

这显然太长了,无法发表评论......

如果您在更改某人的密码后查看 wp_users 表,他们的 user_pass 字段将如下所示$P$BCaLL1.Kcf3mWvwhEvQedwyX.etREw.。这$P$是一个标志,表明PHPPass生成了密码。接下来的 8 个字符BCaLL1.K是每个用户唯一的随机盐。其余字符是对密码多次运行散列函数 (bcrypt) 的结果,每次将要再次运行散列时,将盐附加到值上。

您可能认为以明文形式存在盐是一种安全风险,但是每条记录具有唯一的盐使得使用彩虹表破解密码变得更加困难,并且多次运行哈希算法并每次对其进行加盐使得计算成本高昂裂缝。

要回答您最初的问题,该wp_hash_password()功能是开始的地方。您可以看到它如何与 PHPass 交互以生成哈希。

于 2016-05-05T01:40:30.190 回答
0

事实证明,woo commerce 和 WordPress 确实使用相同的密码哈希(在本例中为 phpass)。

但是,密码散列器不会以相同的方式对相同的密码进行两次散列。因此,检查纯文本密码是否与加密密码相同的唯一方法是运行特殊功能。

在这种情况下,phpass的特殊功能是“checkpassword”:

$correct = 'original password here';
$hash = 'some hashed password (eg. $P$BzunkYjtVU1F6Derj3.2sNslS.4jL6/)';
$check = $t_hasher->CheckPassword($correct, $hash);

if ($check){
  echo "The passwords are the same";
}else
  echo "The passwords are not the same";

在示例中,它根据哈希检查纯文本密码以查看它们是否相同。有关它的更多信息可以在 phpass 下载文件夹中的“test.php”文件中找到。

就我而言,我只需要下载 phpass 并实现“checkpassword”功能。

于 2016-05-06T11:03:08.370 回答