WordPress使用什么类型的哈希?

180
WordPress使用何种类型的哈希算法?以下是WordPress哈希算法的示例:

$P$Bp.ZDNMM98mGNxCtHSkc1DqdRPXeoR.


3
它使用了刺鲀哈希技术,你可以在这里阅读更多信息。http://www.kvcodes.com/2016/09/wordpress-password-hash-generator/ - Kvvaradha
2
它是一个组合字符串,可以包括标识符(即将来要发生的事情),盐和密码散列。 它旨在允许多个哈希类型和前向/后向兼容性。 在您的示例字符串中,$P$表示它已经被加盐,B表示它使用Blowfish进行了哈希处理(我想),接下来的8个字符(p.ZDNMM9)是盐,其余部分是散列值。 您可以在这里查看其工作原理的源代码(https://github.com/WordPress/WordPress/blob/master/wp-includes/class-phpass.php)。 - Collin Krawll
11个回答

168

17
如果有人像我一样看到这个旧问题,请注意MD5已不再安全。如果你的PHP版本是5.5.0及以上,请使用新的password_hash函数。如果你只有PHP 5.3.7以上的版本,请使用这里的兼容库https://github.com/ircmaxell/password_compat。 - Andrew Brown
21
不确定这是否有所帮助,但是WP在第一次使用密码时仍然会采用纯的MD5加密方式,之后会对其进行“盐值”处理。因此,如果你可以访问数据库并使用MyPHPAdmin将密码更改为“MyPass”,在“Function”下拉菜单中选择MD5,它将保存为纯的MD5。登录WordPress,它会将其更改为添加了$P$B__/的“盐值”版本。 - BillyNair
1
基本上,如果用户没有使用密码登录,则仍将以MD5格式显示,与使用相同密码的其他任何人看起来都一样。一旦您登录,即使使用完全相同的密码,它也会更改为您自己的个人“盐”,因此您和您的朋友同时使用相同的密码登录,您的“盐化MD5”将看起来不同。这意味着,无法查询数据库以测试是否已从默认值更改了密码,因为WP将其更改为盐化版本,即使与默认值相同。 - BillyNair
5
MD5是毫无疑问的,100%的加密不安全,且不能用作哈希密码存储方法。 - Andrew Brown
2
@AndrewBrown 唯一的原因是为了支持向后兼容性,MD5仍然有效。一旦用户登录,它将更新md5到新散列。但是是的,这确实留下了安全漏洞。 WP已经足够长时间停止支持MD5。 - Hans-Eric Lippke
显示剩余6条评论

24
$hash_type$salt$password
如果哈希函数不使用盐,则其中不会有$符号。在您的情况下,实际哈希值位于第二个$之后。
这是因为你可以有许多类型的哈希函数,使用不同的盐和将字符串输入到一个函数中,该函数知道如何将其与其他值匹配。

谢谢 但我认为MD5哈希必须是十六进制的,就像这样:b1946ac92492d2347c6235b4d2611184为什么这个哈希中有A-Z和.字符? 这是一个MD5哈希吗? - Amanda Kumar
可能是使用的哈希类型。哈希只是一个固定大小的字符串,可以包含任何你想要的内容。 - Ólafur Waage
1
@Amanda Kumar。虽然来晚了,但MD5生成128位(16字节)的值。该值可以以不同的方式存储和表示,例如作为十六进制字符串、Base64字符串或文件中的原始数据。通常看到MD5值以十六进制表示,但WordPress使用的是Base64。您的十六进制值在Base64中将是sZRqySSS0jR8YjW00mERhA==,相比于十六进制,它使用25%更少的字符来表示相同的数据。 - jordanbtucker

17

手动重置WordPress数据库密码,简单的MD5哈希就足够了。 (请参见下面的原因)

为了防止破坏向后兼容性,存储在数据库中的MD5哈希密码仍然有效。 当用户使用此类密码登录时,WordPress检测到使用了MD5,重新使用更安全的方法对密码进行哈希,并将新的哈希存储在数据库中。

来源:http://eamann.com/tech/wordpress-password-hashing/

更新:这是2014年发布的答案。我不知道它是否适用于最新版本的WP,因为我不再使用WP。


1
保存MD5哈希值不再起作用了。来源:我刚试过了。 - Jay Jee
刚刚我也试了一下并登录成功。MD5 已自动转换为 wp 哈希。Wp 版本为 5.1。 - Miro
刚试了一下,在我的 WP 上也可以运行。 $wp_version = '5.5.3'; $wp_db_version = 48748; - TonyQ
同样适用于5.8.3版本。 - user2513149

14

在我手动更改数据库时,MD5的使用对我很有帮助。请参见:重置您的密码


1
不,这不是普通的MD5哈希,普通的MD5哈希看起来像这样:b1946ac92492d2347c6235b4d2611184。我听说它基于MD5,但有人能告诉我它使用的是什么类型的哈希和在passwordspro中选择哪个选项吗? - Amanda Kumar
25
如果手动输入MD5到表格中,它可以工作,但在第一次登录时,WordPress会使用自己的哈希算法重新编写它,所以它非常适用于重置密码,但不能超过此范围。 - GiladG
1
@FranciscoCorralesMorales - 在数据库中输入密码,然后从下拉菜单中选择MD5仍然有效。您还可以将MD5加密字符串复制/粘贴到框中,不选择任何内容,它也会起作用。(因此,如果您的密码是“qwertyuiop”,则ND5为“6eea9b7ef19179a06954edd0f6c05ceb”。如果您使用直接的“qwertyuiop”密码,请选择“MD5”,或者使用那个长哈希而不选择任何内容,保存数据库,然后使用“qwertyuiop”登录WordPress,它将起作用) - BillyNair

11

这取决于使用的 PHP 版本。wp-includes/class-phpass.php 包含了所有答案。


这个类实现了 - 可移植的 PHP 密码哈希框架。这个答案打印出你所需要的一切... - reyqueson

10

我曾经遇到过同样的问题,想要了解WordPress使用的是哪种类型的哈希。

它是wp hash password

示例:

将已哈希密码与其明文字符串进行比较:

<?php
$wp_hasher = new PasswordHash(8, TRUE);

$password_hashed = '$P$B55D6LjfHDkINU5wF.v2BuuzO0/XPk/';
$plain_password = 'test';

if($wp_hasher->CheckPassword($plain_password, $password_hashed)) {
    echo "YES, Matched";
} else {
    echo "No, Wrong Password";
}
?>

查看这些链接:https://codex.wordpress.org/Function_Reference/wp_hash_password

https://developer.wordpress.org/reference/functions/wp_hash_password

它使用PasswordHash,为密码添加盐并使用8次MD5进行哈希。


8
最佳方法是使用WordPress类来验证用户身份。以下是我的解决方案: 1. 包括以下WordPress PHP文件: include_once(dirname(dirname(dirname(__FILE__))) . DIRECTORY_SEPARATOR . "wp-includes" . DIRECTORY_SEPARATOR . "class-phpass.php"); 2. 创建一个PasswordHash类的对象: $wp_hasher = new PasswordHash(8, true); 3. 调用CheckPassword函数来验证用户身份: $check = $wp_hasher->CheckPassword($password, $row['user_pass']); 4. 检查变量$check:
if($check) {
   echo "password is correct";
} else {
   echo "password is incorrect";
}

请注意: $password 是明文未加密的密码,而$row['user_pass'] 是已经加密的密码,需要从数据库中获取。

3
回答中不太清楚,但是 $password 是明文密码,没有经过哈希处理,而 $row['user_pass'] 是已经哈希过的密码,你需要从数据库中自己获取。 - Advait Saravade
请注意,您也可以直接在shell中使用php -a并输入以下命令来执行此操作:include("/path/to/.../class-phpass.php"); $wp_hasher = new PasswordHash(8, true); echo ( $wp_hasher->CheckPassword('password', 'hash_from_db') ? "OK" : "BAD), "\n"; - mivk

5

启动phpMyAdmin并从您的wordpress实例访问wp_users。 编辑记录并选择user_pass函数匹配MD5。在VALUE中写入将成为您新密码的字符串。 点击GO。 前往您的wordpress网站并输入新密码。 回到phpMyAdmin,您将看到WP将HASH更改为类似于$P$B的内容... 享受吧!


已确认2017年安装的WP在2019年仍可使用! - Gerard ONeill

2

WordPress使用MD5密码哈希。它会为普通文本密码创建一个哈希值。除非全局变量$ wp_hasher已设置,否则默认实现将使用PasswordHash,它会向密码添加盐,并使用8次MD5进行哈希。默认情况下使用MD5是因为它在所有平台上都受支持。您可以使用$portable_hashes构造函数参数或属性将PasswordHash配置为使用Blowfish或扩展DES(如果可用)而不是MD5。


1

include_once('../../../wp-config.php');

全局变量 $wpdb;

$password = wp_hash_password("你的密码");


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接