Skip to content

「凭证加密」开关是摆设:前端 UI 存在但从未通过 IPC 连接到后端 #91

@bennylii

Description

@bennylii

问题

设置页面 → 安全 →「凭证加密」开关存在 UI,但无论打开还是关闭,data.json 中的凭证始终是加密的

根因

前端开关只存在于 Zustand store 中,从未通过 IPC 传给后端:

  • src/renderer/src/stores/settingsStore.ts:109credentialEncryption: true 默认值
  • src/renderer/src/components/settings/SecuritySettings.tsx:34-35 — 开关 UI(checked={credentialEncryption} / onCheckedChange={setCredentialEncryption}

但后端 src/main/store/store.ts 的加密逻辑完全无视这个设置:

encryptData(data: string): string {
  if (safeStorage.isEncryptionAvailable()) {
    return Buffer.from(safeStorage.encryptString(data)).toString('base64')
  }
  return data  // 不可用时返回原文
}

只看 safeStorage.isEncryptionAvailable(),不检查任何配置项。

缺失的链路

  1. AppConfig 中没有 credentialEncryption 字段
  2. 没有 IPC handler 传递这个设置到 main process
  3. encryptCredentials() 不检查配置

影响

  • 用户以为关了加密就是明文存储,但 data.json 里的 credentials 字段仍然是 base64 密文
  • 如果用户想在不支持 safeStorage 的环境间迁移 data.json,无法关闭加密

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions