帝国 CMS 会员密码加密方式
学完这篇,你能搞清楚帝国 CMS 的会员密码到底用什么算法加密、存在哪张表哪个字段、怎么自己动手验证,以及忘记密码时怎么安全地手工重置。
第一步:先确认版本和会员表
这一步要拿到两个信息:程序版本号和数据库表前缀,后面所有操作都依赖它们。登录帝国 CMS 后台,页面顶部或「系统」→「系统信息」里会显示版本号(如 7.2、7.5)。表前缀在 e/config/config.php 里,找 $ecms_config['db']['dbtbpre'],默认是 phome_,很多站会改成别的。
然后用 phpMyAdmin 或命令行连上数据库,执行:
SELECT userid, username, password, LENGTH(password) AS len
FROM phome_enewsmember LIMIT 5;
看 len 这一列:32 就是 MD5,40 是 SHA1,如果表里还有 salt 字段,说明程序做了加盐处理。同时确认一下 SHOW COLUMNS FROM phome_enewsmember; 的结果里有没有 salt 列。
注意:把
phome_换成你站点的实际前缀,前缀不对会直接报「表不存在」。
第二步:在源码里定位加密函数
这一步要找到程序真正用的加密代码,因为不同版本算法不一样。用 VS Code 或 Notepad++ 打开站点目录下的 e/class/connect.php,Ctrl+F 搜索 md5(;再打开 e/member/class/memberfun.php,搜索 password。会员注册、登录校验、改密码三处的加密逻辑是一样的,看到哪处都行。
判断规则很简单:如果代码是 md5($password),就是单次 MD5;如果是 md5(md5($password)),就是双重 MD5;如果出现 $salt 变量参与拼接,那就是加盐,必须按源码里的拼接顺序来算(谁在前谁在后不能猜)。
第三步:写个临时脚本对比验证
这一步用一个一次性 PHP 脚本,把明文算出来的值和数据库里的值直接对比,一次就能确认算法。在网站根目录新建 checkpwd.php:
<?php
$pwd = '123456'; // 你已知的明文密码
$conn = mysqli_connect('localhost', '数据库用户', '数据库密码', '数据库名');
mysqli_query($conn, 'set names utf8');
$r = mysqli_query($conn, "select password from phome_enewsmember where username='testuser'");
$row = mysqli_fetch_row($r);
echo '数据库值: ' . $row[0] . '<br>';
echo 'md5: ' . md5($pwd) . '<br>';
echo 'md5(md5): ' . md5(md5($pwd)) . '<br>';
浏览器访问 你的域名/checkpwd.php,哪一行和「数据库值」完全一致,就是哪种算法。
注意:验证完立刻删掉
checkpwd.php。放在根目录等于把数据库账号密码挂在公网上,会有被扫到的风险。
第四步:手工重置会员密码
这一步在确认算法后,直接把算好的密文写回数据库。以单次 MD5 为例,123456 的 MD5 是 e10adc3949ba59abbe56e057f20f883e,执行:
UPDATE phome_enewsmember
SET password = 'e10adc3949ba59abbe56e057f20f883e'
WHERE username = 'testuser';
如果是加盐版本,要先从源码里确认拼接规则,再用 PHP 算出密文,同时把对应的 salt 值一起写进去,两个字段必须配套。
注意:后台「会员管理」里改密码走的是程序自己的加密,一定能登录;直接改库时如果算法或 salt 对不上,前台会一直提示密码错误。
小结
- 会员密码存在
phome_enewsmember表的password字段,前缀以e/config/config.php为准。 - 字段长度 32 位是 MD5,是新老版本最常见的形态;有
salt列说明做了加盐。 - 加密规则以
e/class/connect.php和e/member/class/memberfun.php里的源码为准,不要凭经验猜。 - 单次 MD5 无盐的站点,弱密码可以被彩虹表直接反查,建议改成强密码。
- 手工重置后务必删除临时脚本。
原文链接:https://www.gj0.com/thread-517.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。