背景
在某.net项目中,安全扫描发现客户端使用的sqlite数据库未进行加密处理,需要整改。
解决思路
在C#中,使用SQLite数据库进行加密通常有以下几种方式:
- *使用SQLCipher 。 *一个开源的 SQL database engine with transparent 256-bit AES encryption,可以和 System.Data.SQLite.Core 集成,外加sqlite-net orm框架,简单易用。
- 官方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