discuz X3.5密码破解password_hash()反向转换为md5密码进行破解的方法
discuz X3.5密码使用php内置函数password_hash() ,即可获得兼容Discuz系统的新密码。新密码的hash是一体的一个字符串,没有单独的salt,因此salt字段留空即可。如果你想使用其他编程语言生成兼容Discuz系统的密码:请自行查询所使用语言的相关算法实现。由于Discuz采用的标准符合国际通用的密码存储最佳实践,因此跟标准的实现大多都是兼容的。
默认算法:bcrypt,也可以查询blowfish,也是它。
高版本php用户可选使用更安全的argon2i算法,但就不能再降级php了。
顺带一提,如果你实在就是做不到用新方法手动生成密码的话,这个是不强求的。
因为Discuz即便引入了新的更安全的密码保存规则,并不代表就直接放弃了对旧存储规则的兼容。
由于必须知道密码原文才有可能将其重新编码成新规则,对老规则的兼容还将持续存在很长很长的一段时间,否则老用户就没法登录了。
这意味着哪怕你仍然采用老方法在数据库里强行重置用户的密码,也是没问题的,只是会让系统多重置一次。
非对称加密函数password_hash()转换为Md5()的思路进行破解discuz X3.5密码:
md5+salt 直接使用MD5()加密,是很容易被破解的(犹记得曾经忘记密码,到处找免费的破解网站...),但加上salt想要破解就难上很多了,即使你获得salt和最终密文,想要破解也是十分困难的。 如何实现md5+salt?很简单,密码连接一个随机字符串即可。
[*]
function md5_salt_hash($pass)
[*]
{
[*]
$salt = ‘5f9901fc60b7669’; //定义一个salt值,最好足够长,或者随机
[*]
return md5($pass, $salt);
[*]
}
password_hash PHP5.5引入了Password Hashing函数,内核自带无需安装扩展,使用起来十分方便。它属于Password Hashing API(创建和校验哈希密码)函数之一。 Password Hashing API包含4个函数: password_hash()、password_verify()、password_get_info()、password_needs_rehash()。 string password_hash(string $password, integer $algo [, array $options ]) 参数: $password 密码 $algo哈希算法 $options选项 实例:
[*]
$pwd = "123456";
[*]
$hash = password_hash($pwd, PASSWORD_DEFAULT);
[*]
echo $hash;
上例输出结果类似:$$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a,并且刷新页面该哈希值也会不断的变化。
哈希值创建完毕,我们可以用password_verify()来校验密码是否和哈希值匹配。
boolean password_verify ( string $password , string $hash ) 它接收2个参数:密码和哈希值,并返回布尔值。检查之前生成的哈希值是否和密码匹配,代码:
[*]
if (password_verify($pwd,'$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a')) {
[*]
echo "密码正确";
[*]
} else {
[*]
echo "密码错误";
[*]
}
基本上使用以上这2个函数就能安全的创建和校验hash密码了。 总结
MD5+salt加密 可跨语言加密解密。password_hash加密 只能通过php的password_verfiy校验。
页:
[1]