跳转至

账号与安全

本页介绍多账号管理的操作方式,以及凭证的加密存储机制。


多账号管理

点击侧边栏顶部的用户头像区域,打开「账号管理」弹窗。

添加账号

添加账号有两种方式:

方式一:扫码登录(推荐)

  1. 点击 [添加账号] 按钮,默认打开「扫码登录」Tab。
  2. 用 B 站手机 App 扫描二维码。
  3. 确认登录后,程序自动获取 SESSDATA 和 bili_jct 并保存。

方式二:手动输入

  1. 切换到「手动输入」Tab。
  2. 填入该账号的 SESSDATAbili_jct(获取方式见 登录 B 站账号)。
  3. 点击 保存,账号出现在列表中。

切换账号

在账号列表中点击某条记录,将其激活为当前账号。切换后:

  • 侧边栏顶部的头像和用户名会更新。
  • 后续所有 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 不可用 密钥仅内存有效,关闭程序后需重新输入凭证