Halo2 如何快捷更改密码

四月 05, 2026 / Administrator / 1阅读 / 0评论

Background(背景)

腾讯云服务器 系统是 Ubuntu 24.04,搭建了 1Panel,使用 Docker搭建了一个Halo个人站,版本是 Halo2,使用的是 Mysql8.0系统
许久没有登录,忘记了密码,看了很久官方播客也没太看懂具体的解决方案,咨询了 Gemini,沟通了一会儿, 找到了一个更改密码的口令,分享给大家:

docker exec -it <MYSQL_CONTAINER_NAME> mysql \
  -u <DB_USERNAME> \
  -p<DB_PASSWORD> \
  -D <DB_NAME> \
  -e "UPDATE extensions SET data = JSON_SET(CONVERT(data USING utf8mb4), '$.spec.password', '{bcrypt}<BCRYPT_HASH>') WHERE name = '/registry/users/<HALO_USERNAME>';"

占位符

说明

示例

<MYSQL_CONTAINER_NAME>

MySQL 容器的名称

1Panel-mysql-eTjV

<DB_USERNAME>

数据库用户名 (来自 .env)

halo_dbNF6X

<DB_PASSWORD>

数据库密码 (来自 .env)

halo_ypQhCx

<DB_NAME>

Halo 使用的数据库名

halo_3mnwcn

<BCRYPT_HASH>

想要设置的密码加密串

$2a$10$3t/AhE5...

<HALO_USERNAME>

Halo 后台的登录用户名

test

Halo2 基于 Spring Security 安全框架,默认采用 BCrypt 强哈希算法来存储用户密码。这种算法具有内置“加盐”(Salt)和可调“成本因子”(Work Factor)的特性,能够有效防御彩虹表和暴力破解攻击。

1. 存储格式要求

在 Halo2 的数据库(extensions 表)中,密码字段并不是单纯的哈希值,它必须遵循 统一身份验证前缀 格式:

格式: {算法名称}哈希版本$成本因子$随机盐+密文

示例: {bcrypt}$2a$10$8.UnVuG9HHgffUDAlk8q2OuVGkqEnLPz0WpOkvAyqXqjnG4vve9S.

  • {bcrypt}: 算法标识符(必须包含,否则 Halo 无法识别加密协议)。

  • $2a$: BCrypt 算法的版本号。

  • $10$: 成本因子(Rounds),数值越高计算越慢,防御力越强,默认通常为 10。

  • 后续字符串: 由算法自动生成的随机盐值和加密后的二进制摘要。

1.1 加密密码生成方式

1.1.1 网站在线生成(网站文章不引入外部链接,所以请自行搜索)

1.1.2 本地生成

  1. 命令行生成
    如果你的服务器安装了 Python3,可以直接运行:

pip install bcrypt
python3 -c 'import bcrypt; print("{bcrypt}" + bcrypt.hashpw(b"你的密码", bcrypt.gensalt(10)).decode())'

文章作者:Administrator

文章链接:http://localhost:8090/archives/halo2-ru-he-kuai-jie-geng-gai-mi-ma

版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0 许可协议,转载请注明出处!


评论