账号与安全
本页介绍多账号管理的操作方式,以及凭证的加密存储机制。
多账号管理
点击侧边栏顶部的用户头像区域,打开「账号管理」弹窗。
添加账号
添加账号有两种方式:
方式一:扫码登录(推荐)
- 点击 [添加账号] 按钮,默认打开「扫码登录」Tab。
- 用 B 站手机 App 扫描二维码。
- 确认登录后,程序自动获取 SESSDATA 和 bili_jct 并保存。
方式二:手动输入
- 切换到「手动输入」Tab。
- 填入该账号的
SESSDATA和bili_jct(获取方式见 登录 B 站账号)。 - 点击 保存,账号出现在列表中。
切换账号
在账号列表中点击某条记录,将其激活为当前账号。切换后:
- 侧边栏顶部的头像和用户名会更新。
- 后续所有 API 请求使用新账号的凭证。
检测有效性
点击 [全部检测] 按钮,程序会批量向 B 站 API 验证所有已保存账号的登录状态。
| 结果 | 含义 |
|---|---|
| ✅ 有效 | 凭证可用,可正常发送弹幕 |
| ❌ 失效 | 凭证已过期,需要重新获取 SESSDATA 和 bili_jct |
删除账号
选中账号后点击删除。删除后该账号的凭证从本地加密存储中永久移除。
凭证加密存储
程序使用 Keyring + Fernet 双层机制保护你的 B 站凭证。
加密流程
用户输入 SESSDATA / bili_jct
│
▼
从系统密钥环 (Keyring) 读取加密密钥
│
┌─────┴─────┐
▼ ▼
密钥存在 密钥不存在
│ │
│ ▼
│ Fernet.generate_key() 生成新密钥
│ │
│ ▼
│ 尝试存入 Keyring
│ ┌─────┴─────┐
│ ▼ ▼
│ 成功 失败(Keyring 不可用)
│ │ │
│ │ ▼
│ │ 密钥仅内存有效,不持久化
│ │ → save_accounts() 跳过写盘
▼ ▼
Fernet.encrypt(凭证 JSON)
│
▼
atomic_write_bytes → accounts.json
安全说明
| 机制 | 说明 |
|---|---|
| Keyring | 利用 Windows 凭据管理器存储加密密钥,密钥不以明文形式出现在磁盘上 |
| Fernet | 对称加密算法(AES-128-CBC + HMAC),确保 accounts.json 文件内容不可直接读取 |
| 原子写入 | 保存时先写临时文件再重命名,避免写入中断导致文件损坏 |
Keyring 不可用时的降级行为
如果系统密钥环不可用,加密密钥仅在本次运行期间有效。
此时程序不会降级为其他存储方式,也不会生成无法解密的 accounts.json 文件——凭证只保存在内存中,关闭程序后需要重新输入。
文件位置
加密后的凭证存储在:
%LOCALAPPDATA%/Miku_oso/BiliDanmakuSender/accounts.json
安全警告
虽然凭证已加密,但加密密钥存储在本机的 Keyring 中。不要将 accounts.json 文件分享给他人,在同一台机器上该文件可以被解密。
异常处理
| 场景 | 程序行为 |
|---|---|
accounts.json 文件损坏 |
自动备份损坏文件,以空账号列表启动 |
| 密钥不匹配(换机器拷贝文件) | 抛出 InvalidToken 异常,文件保留不动 |
| Keyring 不可用 | 密钥仅内存有效,关闭程序后需重新输入凭证 |