sqlcipher 加密sqlite文件(最佳实践)

672 阅读1分钟

背景

在某.net项目中,安全扫描发现客户端使用的sqlite数据库未进行加密处理,需要整改。

解决思路

在C#中,使用SQLite数据库进行加密通常有以下几种方式:

  1. *使用SQLCipher 。 *一个开源的 SQL database engine with transparent 256-bit AES encryption,可以和 System.Data.SQLite.Core 集成,外加sqlite-net orm框架,简单易用。
  2. 官方SQLite库 采用System.Data.SQLite扩展进行读写SQLite数据库。需依赖项 System.Data.SQLite.SEE.dll,需要自己额外封装工具类,操作繁琐。

客户端环境

visual studio 2022

C#

.net framework 4.7.2

开发过程

1.nuge安装依赖包

SQLite 3.13.0

sqlite-net  1.6.292

sqlite-net-sqlcipher 1.9.172

​编辑

2、ORM实体类准备

​编辑

3.SqliteHelper操作工具类,负责连接加密、增删改查。若没用数据库,会自动创建。

​编辑

4.调用,插入数据。

​编辑

主要坑点

1.sqlite3.dll版本要适配系统。

*2.e_sqlcipher.dll  用于加解密的,nuget后可能不会自动生成项目里,需要手动从packages\SQLitePCLRaw.lib.e_sqlcipher.2.1.7\runtimes\中取适配系统的dll,本人系统是x64的所以从这拿,然后放到运行目录下,如:bin\debug*

​编辑

特别在第2点上,一开始笔者以为只要nuget安装后,对应的dll依赖会自动带到项目中,但实际上这个dll不会自动带入,导致一直加密不成功。最后花费大量时间,通过查看多方资料才摸索出这个问题,顺便记录下,避免后面的人入坑。

最后附上完整的代码路径: lomen_zhou/en-sqlite3