QREcrypt安全文件加密工具
Table of Contents
QREcrypt 是一个基于 Go 语言开发的文件加密和管理工具,提供了安全可靠的文件加密和管理功能。本工具采用现代加密算法,结合双重认证机制,为用户提供了一个安全的文件加密解决方案。
主要特性
- 单一可执行文件,无依赖,小巧安全,方便携带
- 支持多种高强度加密算法(QChaCha 20、XChaCha 20、ChaCha 20、AES-256 等)
- 集成双重认证(2 FA)机制,提供额外的安全保障
- 直观的图形用户界面,支持列表和网格两种文件视图模式
- 文件完整性验证,确保加密和解密过程的可靠性
- 支持文件搜索功能,方便管理大量加密文件
- 自动生成强密钥功能,帮助用户创建高强度密码
- 支持用户数据导出和导入,方便用户迁移数据
- 支持用户数据云端同步,方便用户在不同设备间迁移数据
安装说明
- 点击下载最新版本
- 解压下载的文件
- 运行
QREcrypt.exe
可执行文件
使用指南
用户注册
- 启动程序,点击注册用户按钮
- 填写以下信息:
- 用户名:设置您的账户名称
- 主密钥:用于登录系统的主要密码
- 副密钥:用于加密/解密文件的密码
- 点击生成强密钥可自动生成安全的随机密码
- 点击绑定认证码,使用 Google Authenticator 等 2 FA 应用扫描显示的二维码
- 输入 2 FA 应用显示的 6 位验证码
- 点击注册用户完成注册
用户登录
- 如果用户从旧设备迁移数据,请先点击导入用户按钮,导入之前导出的用户数据
- 输入用户名和主密钥
- 输入 2 FA 应用当前显示的 6 位验证码
- 点击登录用户
主界面
QREcrypt 的主界面有两种文件展示样式:树形列表样式与卡片网格样式。树形列表样式可以展示加密文件各种详细的信息,如文件大小、路径、加密时间以及加密算法等等。而卡片网格样式可以通过点击右键来展示加密文件的详细信息。
无论是树形列表样式还是卡片网格样式都可以通过鼠标左键单击选中该文件,以此来对该文件执行删除或是解密操作。
加密设置
- 点击工具栏的加密设置按钮
- 选择不同的文件加密算法,用于加密文件
- 选择不同的密钥派生算法,用于生成加密密钥
- 点击保存按钮
文件加密
- 点击工具栏的加密文件按钮
- 输入副密钥进行验证
- 选择需要加密的文件
- 等待加密完成
文件解密
- 在文件列表中选择要解密的文件
- 点击工具栏的解密文件按钮
- 输入副密钥进行验证
- 选择解密文件的保存位置
- 等待解密完成
云端同步
QREcrypt 支持云端同步功能,通过用户自己的云端服务器,将数据同步到云端,当用户切换新设备时,可以使用云端同步无缝将配置信息同步过来。同时也能保证数据的安全性和私密性,不会将数据上传到第三方服务器。
该功能的文件上传和下载的请求和鉴权过程全部由软件与服务器之间进行,用户只需配置好服务器环境并在软件提供正确的服务器地址即可。👉 了解详细流程 👈
下载 QREcrypt 的服务端程序:
在自己的服务器中运行服务端程序:
./QREcryptServer -username QREcrypt用户名 -password QREcrypt主密钥 -port 服务运行端口
服务端启动后,会输出以下信息,请确保服务器防火墙已放行该端口。
[GIN-debug] POST /login --> main.loginHandler (3 handlers)
[GIN-debug] POST /upload --> main.uploadHandler (4 handlers)
[GIN-debug] GET /download/:filename --> main.downloadHandler (4 handlers)
服务器启动在 [51122] 端口 ===> 请确保防火墙已放行该端口
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.
[GIN-debug] Listening and serving HTTP on :51122
配置好服务端后,就可以在 QREcrypt 中使用云端同步功能了。QREcrypt 的云端同步功能有两处入口:
- 登录界面左下角导入用户功能中的云端导入。
- 管理主界面上方按钮中的云端同步按钮。
在登录界面中的云端导入功能,是用于用户第一次迁移到新设备时,这时新设备中并没有用户的信息,此时可以使用云端导入功能,将之前旧设备同步到云端的数据导入到新设备中。
此时需要输入用户名、主密钥以及云端服务器的地址和端口,然后点击导入数据按钮,软件会从云端服务器中拉取该用户的数据,并解密保存到本地。接着用户就可以正常通过用户登录进入软件管理主界面。
之后的每次同步都可以使用管理主界面中的云端同步功能,只需输入一次云端服务器的地址,软件就会保存该地址,用户可以随时将本地的数据推送到云端,也可以随时从云端拉取数据到本地。如果用户需要切换云端服务器地址,只需重新填写地址,软件会覆盖原有的地址信息,只保留最新的服务器地址。
这样的场景适合用户在不同设备间来回切换。比如用户有两个设备:家庭设备和办公设备,用户在使用办公设备时加密了新的数据,如果需要在家庭设备也访问到此数据,则只需使用云端同步将数据推送到服务器,回到家庭设备后再使用云端同步将数据从服务器拉取到本地,完成数据跨设备同步。
需要注意的是,QREcrypt 的云端同步功能为了防止云端数据管理的困难,只能在云端存储一份用户数据文件,新推动的数据会覆盖旧的数据,并且在本地也只保留一份用户数据文件,所以用户在不同设备间来回切换时,需要备份重要的文件,以免造成数据覆盖丢失。
在服务器端,程序会打印每次的请求信息,如果需要保存这些日志信息,可以使用nohup命令,将日志信息输出到文件中,并持久化程序运行。
nohup ./QREcryptServer -username admin -password admin -port 51122 > output.log 2>&1 &
其他功能
- 帮助:打开在线帮助文档
- 主题:切换软件明暗主题
- 网格视图:以网格形式显示文件
- 列表视图:以树形列表显示文件
- 删除:删除选中的加密文件
- 导出:导出用户的所有数据,用于迁移数据到新设备
- 导入:导入用户的所有数据,用于从旧设备迁移数据
- 锁定:临时锁定界面,需要输入 2 FA 码解锁
- 注销:退出当前用户
使用场景
- 个人隐私数据保护:在本地电脑中,对需要保密的文件通过 QREcrypt 进行加密处理,即使是电脑被盗取、攻击或者破解,也无法获取用户的隐私数据。同时,QREcrypt 是一个单一的可执行文件,小巧安全,方便携带。用户可以使用U 盘或者移动硬盘携带QREcrypt和导出后的文件数据,随时随地到任何一台电脑上解密使用。兼顾了安全性,便携性,易用性。
- 云存储数据安全:如今云存储服务越来越普及,用户在享受云存储带来的便利的同时,也需要考虑数据的安全性。QREcrypt 可以用来加密上传到云存储的文件,确保即使云服务提供商遭受数据泄露,存储的数据也是安全的,无法获取用户的隐私数据。并且 QREcrypt 支持云端同步功能,用户可以随时随地使用不同设备同步信息,加解密文件。
- 不安全的环境中传输数据:在网吧,图书馆,咖啡厅等公共场所使用公共网络时,用户可以提前使用 QREcrypt 加密自己需要发送的隐私数据,这样即使是遭遇了中间人攻击,数据包嗅探,数据包篡改,也无法获取用户传输的隐私数据。
软件原理
底层数据结构
QREcrypt 使用一个主文件夹 (.QREcrypt
) 来存储用户的所有数据,并为每个用户维护一个用户主文件夹 (.QREcrypt/用户名
)。
.QREcrypt
├── 用户名
│ ├── .用户名_config.enc
│ ├── 加密文件1.enc
│ ├── 加密文件2.enc
│ └── ...
└── ...
每一个用户都拥有一个用户配置文件 (.QREcrypt/用户名/.用户名_config.enc
),其中存放用户的所有数据信息,使用json格式。其中主密钥和副密钥使用 Bcrypt 哈希,Google Authenticator 私钥使用 AES-256 加密,密钥为软件信息+用户信息使用 Argon 2 算法进行密钥派生,文件名称和文件内容使用 SHA-256 进行哈希。整个用户配置文件再次使用 XChaCha 20 算法进行加密,密钥为用户主密钥使用 Argon 2 算法进行密钥派生。
- 用户名
- 主密钥(Bcrypt)
- 副密钥(Bcrypt)
- 2FA私钥(AES-256加密)
- 文件信息
- 原始文件名称
- 原始文件大小
- 原始文件路径
- 加密文件路径
- 文件加密时间
- 文件名称哈希(SHA-256)
- 文件内容哈希(SHA-256)
- 文件加密算法
- 密钥派生算法
- 文件加密盐值
加密算法
用户所有加密的文件是根据用户选择的文件加密算法进行加密,加密密钥使用用户副密钥通过用户选择的密钥派生算法产生。
- 支持的加密算法:
- QChaCha 20 (推荐)
- XChaCha 20
- ChaCha 20
- AES-256
- QChaCha 12
- QChaCha 8
QChaCha 8/12/20 使用 32 字节密钥,12 字节随机数,分别采用 64/96/160 字节量子随机数,迭代 8/12/20 轮
XChaCha 20 使用 32 字节密钥,24 字节随机数,迭代 20 轮
ChaCha 20 使用 32 字节密钥,12 字节随机数,迭代 20 轮
AES-256 使用 32 字节密钥,16 字节随机数,迭代 14 轮
- 支持的密钥派生算法:
- Argon 2 (推荐)
- Scrypt
- PBKDF 2
Argon 2 使用 16 字节盐值,迭代 10 次,内存占用 64 MB,线程数 4
Scrypt 使用 16 字节盐值,CPU 内存成本 32768,块大小 8 (1024 字节) ,线程数 4
PBKDF 2 使用 16 字节盐值,SHA 3-256 作为伪随机函数,迭代 100000 次
- 密钥存储算法: Bcrypt
Bcrypt 迭代 12 轮,自动生成盐值并验证
运行流程
注册流程:当用户第一次运行软件时,软件会检查主文件夹是否存在,如果不存在,则创建主文件夹。接着用户进入注册流程,输入用户名和主密钥副密钥 (可使用软件自动生成强密钥),然后需绑定 2 FA 认证码,软件随机生成一个 Google Authenticator 私钥和二维码,用户使用 2 FA 应用扫描二维码并输入 2 FA 应用显示的 6 位验证码,完成绑定。软件将用户信息进行部分加密写入用户配置文件,并再次加密保存。
登录流程:用户输入用户名和主密钥,然后输入 2 FA 应用当前显示的 6 位验证码,点击登录用户按钮,软件验证用户名和主密钥,解密并验证 2 FA 验证码,验证成功后,软件显示用户界面。如果用户从旧设备迁移数据,请先点击导入用户按钮,导入之前导出的数据,然后才可以进行登录操作,否则软件会提示用户没有注册。
加密设置流程:用户点击加密设置按钮,软件弹出加密设置窗口,用户选择加密算法和密钥派生算法,点击保存按钮,软件后续的加密文件行为都将使用这种加密方式。如果用户没有设置加密算法,软件默认使用 QChaCha 20 与 Argon 2 的算法组合,此算法组合拥有理论上最高的加密强度,但需要牺牲一定的加密速度。
文件加密流程:用户选择需要加密的文件,输入副密钥进行验证,软件根据用户选择的加密算法和密钥派生算法,使用副密钥+随机盐值通过密钥派生算法生成加密密钥,并加密文件,同时将加密后的文件移动到用户主文件夹下,将所有文件信息写入用户配置文件。
文件解密流程:用户选择需要解密的文件,输入副密钥进行验证,软件根据用户配置文件中记录的加密算法和密钥派生算法,使用副密钥+盐值生成解密密钥,解密文件,这时软件并不会删除该加密文件,用户依然可以重复解密该文件,如果用户想要删除该加密文件,应当手动选择文件列表点击删除按钮,才能将该加密文件删除。
用户数据导出流程:用户点击导出数据按钮,软件会将用户主文件夹下的所有文件,即用户配置文件和加密后的文件,全部打包成一个 zip 文件,用户可以自行选择保存位置。该功能用于用户更换设备时,将之前的数据导出到新设备中。
用户数据导入流程:用户点击导入数据按钮,软件会弹出文件选择窗口,用户选择之前导出的 zip 文件,软件会解压文件到主文件夹下的用户名文件夹中,完成导入。该功能默认会覆盖原有的配置和文件,如有需要请自行手动保存原有文件,以免造成数据丢失。该功能用于用户更换设备时,将之前的数据导入到新设备中。
云端同步流程:用户可以选择使用软件提供的云端同步功能,将数据同步到云端,用户需要自行准备云端存储服务,用户需要先在自己的服务器上配置好环境,再在软件中设置好云端服务器地址,然后点击推送按钮,软件会将用户主文件夹下的所有文件同步到云端,当用户切换新设备时,可以使用云端同步的拉取数据功能无缝将配置信息同步过来。
安全性说明
- 软件中所有的加密算法和密钥派生算法都使用了完全随机的随机数和盐值,所有加密都使用了密钥派生算法,保证加密的安全性。
- 软件中所有文件的加密都遵循一次一密的原则,使用副秘钥+盐值利用密钥派生算法生成完全不同的文件加密密钥。
- 软件中的配置信息,尤其是关键的主密钥和副密钥都使用了 Bcrypt 哈希,2 FA 私钥使用了 AES-256 加密,保证密钥的安全性。整个配置信息使用 XChaCha 20 加密,保证数据的安全性。
- 软件中使用了 Google Authenticator 的双重认证机制,保证账户的安全性。
- 软件中所有数据都存储在用户主文件夹中,软件根据用户名自行选择保存位置,软件可以完全离线运行,可以不将数据上传到任何服务器,也不会在软件中存储用户数据。
- 软件运行时在内存中存储的敏感数据,只有在需要使用时才解密。在处理完敏感信息后,立即使用零填充或其他方法清理内存中的数据,使用
runtime.GC()
强制垃圾回收机制回收内存。软件尽量将敏感数据封装在局部作用域中。避免硬编码直接写在程序中。 - 软件使用 GO 语言
-ldflags "-s -w"
选项编译,去除符号表和调试信息,减少潜在的信息泄漏。使用 garble 工具对程序代码进行混淆编译,是程序中的字符串文本更加复杂,增加逆向的难度。使用 UPX 进行压缩加壳,减小程序体积,并增加反调试的难度,防止内存攻击
go build -ldflags "-s -w -H windowsgui" -o QREcrypt.exe .
garble -literals build -ldflags "-s -w -H windowsgui" -o QREcrypt_obfuscated.exe .
upx --best QREcrypt.exe
常见问题
忘记密码怎么办?
- 由于安全原因,密码无法找回。请务必保管好您的密码。
如何备份加密文件?
- 可以使用工具栏中的导出用户数据功能。
- 也可以手动备份
.QREcrypt
文件夹中的所有内容。 - 如果配置了云端环境,也可以使用软件的云端同步功能。
为什么需要两个密码?
- 主密钥用于系统登录,副密钥用于文件加密,这种分离设计提供了更好的安全性。
支持加密文件夹吗?
- 目前版本仅支持单个文件加密,不支持直接加密文件夹。如果您需要加密文件夹,可以将其打包成单个文件 (如 zip) 后加密。
支持批量加解密文件吗?
- 目前版本仅支持单个文件加解密,不支持批量加解密文件。
许可证
本项目采用 MIT 许可证
联系方式
如有问题或建议,请通过以下方式联系:
- 项目主页:GitHub
- 问题反馈:Issues
- 邮箱:1310165597@qq.com
By LiuChao(Pi3-l22)