织梦后台忘记密码怎么重置

密码存储原理

织梦CMS的管理员密码存储在 dede_admin 表的 pwd 字段中,使用 MD5 加密。需要注意的是,织梦并非直接对明文做 MD5,而是先把密码末尾拼接一段名为 cryptographic 的密钥(保存在 data/config.cache.inc.php 中的 $cfg_cookie_encode),再做 MD5 散列。因此直接写 md5('123456') 是登录不上的,必须拼接密钥。

原因分析

1. 长时间未登录忘记密码

站长长期不进后台,新员工交接时密码遗失,需要快速恢复。

2. 密码被恶意篡改

站点被黑后 admin 密码被改写,导致原账号无法登录。

3. cookie_encode 丢失

迁移服务器时漏拷 data/config.cache.inc.php,原密码 hash 全部失效。

重置方法

方法一:phpMyAdmin 直接改表

  1. 登录宝塔或 phpMyAdmin,找到 dede_admin 表。
  2. 编辑 admin 这一行,将 pwd 字段值改为:
    f297a57a5a743894a0e4

    这串值对应明文 admin,是织梦默认密钥下的标准 MD5。

  3. 保存后用账号 admin、密码 admin 登录后台。
  4. 进入「系统 → 用户管理 → 修改密码」重新设置强密码。

方法二:上传 radminpass.php 工具

织梦官方提供了一个一键重置脚本 radminpass.php,上传到网站根目录后浏览器访问,按提示输入新密码即可。操作完毕务必删除该文件。

方法三:自写脚本重置

新建 reset.php 放到根目录,内容如下:

<?php
require_once(dirname(__FILE__).'/include/common.inc.php');
$pwd='admin123';
$key=$cfg_cookie_encode;
$hash=md5($pwd.$key);
$dsql->ExecuteNoneQuery("UPDATE `dede_admin` SET pwd='{$hash}' WHERE userid='admin'");
echo 'reset done, new password: '.$pwd;
?>

访问后立即删除该文件。

配置示例

如果通过 SQL 命令行操作,可以执行:

UPDATE dede_admin SET pwd=MD5(CONCAT('admin123', '你的cfg_cookie_encode值')) WHERE userid='admin';

查看密钥的方法:打开 data/config.cache.inc.php,搜索 $cfg_cookie_encode

注意事项

  • radminpass.phpreset.php 等脚本必须即用即删,否则会被黑客用来反复重置密码。
  • 密码重置后第一时间修改 cfg_cookie_encode,让旧 hash 失效。
  • 不要把新密码设置为 admin123456 等弱口令,建议 12 位以上含大小写数字符号。
  • 如果站点被入侵过,重置密码后必须全站查杀 webshell,修改数据库账号密码与 FTP 密码。
建议把后台登录地址从默认 /dede/ 改为随机字符串目录,提升安全等级。

建议与展望

密码重置只是应急手段,更重要的是建立密码管理机制。建议把后台账号密码统一存到密码管理器(如 1Password、Bitwarden)中,避免遗忘;为后台启用 IP 白名单或 BasicAuth 二次验证,即使密码泄露也能挡住大部分暴力破解。如果团队多人协作,应通过「用户组管理」分配最小权限账号,主 admin 仅由核心运维掌握。今天就先把密码改强、把脚本删干净,给站点加一道安全保险。