前言
其实这篇日记,本不应该出现。但有一天,我忘记了一个typecho博客的密码,但去搜索引擎找了很久,都是老版本Typecho重设办法。我在想,新版本能不能重设,一番折腾后,我整出来了。写了这日记留念。
背景
Typecho 1.1版本之后,用户密码验证采用了OpenWall的PHPass来加密用户密码,而不是MD5
Typecho 1.0版本以前用的是MD5简单加密,1.1以后,PHpass的启用,相对于以往弱鸡MD5来说,安全性拥有较大提升。
但这也引出一个问题。以往的密码重设方法将不可用。
折腾过程
开始
我锁定了Typecho的install.php文件,试图寻找用户密码生成的代码。
没想到一找就找到了。
$password = empty($config['userPassword']) ? substr(uniqid(), 7) : $config['userPassword'];
$hasher = new PasswordHash(8, true);
$installDb->query($installDb->insert('table.users')->rows(array('name' => $config['userName'], 'password' => $hasher->HashPassword($password), 'mail' => $config['userMail'],
非常清晰易懂,过程就是
- 判断用户有没有输入密码,没有就给他随机生成一个
- 然后就执行PHpass加密用户密码,放入数据库
高潮
既然我得到了Typecho处理用户密码的关键代码,接下来就可以嘿嘿嘿了。
经过一番查找,得到PHpass文件目录
Typecho目录下var目录中的PasswordHash.php文件
接下来就嘿嘿嘿了。
- 首先新建一个PHP文件
- 加载PHpass文件
- 模拟生成
PHP代码如下(在Typecho主目录):
<?php
require 'var/PasswordHash.php';
$a = new PasswordHash(8,true);
echo $a->HashPassword( **这里替换成你要重设的密码** );
?>
运行这个PHP程序,然后得到一串处理后的密文,然后打开phpMyAdmin,找到typecho_users表,然后把password那行update成你刚刚得到的密文。图如下:
完工。
后台登陆成功。
吐槽下Typecho。PHpass已经更新到0.5版本了,如今还在用着0.2老版本。。
暂无评论