Skip to main content
  1. internet/

自研的秘钥本

·932 words·2 mins·

项目背景 #

市场上有很多的密码本工具,但是都没能很好的满足我的需求:

  1. 跨平台。
  2. 支持多种信息:token, google验证码, 账号密码。
  3. 开源

为什么需要是开源呢?

  1. 能够让我能够本地部署,密码放到别人的服务器上我总是不放心。
  2. 能够确保不会有什么大问题(开源的魅力)。
  3. 能够自己定制功能。比如开放接口访问,更改UI。

项目features #

  1. 支持三种信息:token, google验证码, 账号密码
  2. 支持多种平台:mac, windows, linux, android, ios …
  3. 支持浏览器查询、填充密码
  4. 支持多端同步。
  5. 快捷复制、查询账号密码、谷歌验证码。
  6. 支持客户端独立部署,不依赖服务器。

架构设计 #

架构图 #

架构设计图

客户端设计 #

  1. 客户端要求能够独立部署,不依赖服务器。也就是说客户端要有自己的本地数据库。
  2. 客户端支持三类信息:token, google验证码, 账号密码。也就是说要有三个单独的页面展示这些信息。
  3. 客户端可以通过api同步服务端的数据,同时向服务端上传数据。
  4. 客户端支持接收服务端事件来同步本地数据。

服务端设计 #

服务端的设计主要是为了支持多端同步以及数据备份(后边增加了浏览器插件,因此向浏览器插件提供数据也是其功能之一)。

  1. 接收客户端请求,对数据进行增删改查。
  2. 处理完客户端的增加/修改/删除请求,需要向客户端推送事件以实现实时同步。

浏览器插件设计 #

当用户打开一个新的地址时,插件会根据当前域名向服务端请求数据,服务端则会将域名相关的账号密码信息等返回给插件,插件对数据进行本地的存储。

  1. 当需要填充账号密码时,插件会根据当前域名查找本地的账号密码信息,然后填充到对应的输入框中。
  2. 当需要填充google验证码时,插件会根据当前域名查找本地的google验证码的秘钥,然后根据OTP算法计算出谷歌验证码,然后填充到对应的输入框中。
  3. 用户可以点击插件,来获得当前域名下的账号信息。

技术选型 #

  1. 数据库: 客户端和服务端都使用sqlite。主要原因是本地部署,只为个人使用,因此数据量不大,因此选用轻量的sqlite。
  2. 客户端: flutter。跨平台,且flutter的性能也不错。
  3. 服务端: Rust. 也是一个Rust练手的机会。
  4. 浏览器插件: Manifest V3. 这个是Google插件平台的最新版本。

效果图 #

  1. token列表页
  2. 账号列表页
  3. google验证码列表页
  4. 设置页
  5. 浏览器插件

项目地址 #