当前位置: 首页 > news >正文

sqlite加密

两种思路

将内容加密后再写入数据库

这种方式使用简单,在入库/出库只需要将字段做对应的加解密操作即可,一定程度上解决了将数据赤裸裸暴露的问题。但也有很大弊端:

  • 这种方式并不是彻底的加密,还是可以通过数据库查看到表结构等信息。
  • 对于数据库的数据,数据都是分散的,要对所有数据都进行加解密操作会严重影响性能。

对数据库文件加密

SQLCipher(Cipher, [ˈsaɪfə(r)],加密算法的意思)。SQLCipher是一个在SQLite基础之上进行扩展的开源数据库,它主要是在SQLite的基础之上增加了数据加密功能,如果我们在项目中使用它来存储数据的话,就可以大大提高程序的安全性。SQLCipher支持很多种不同的平台

SQLCipher

使用256-bit AES加密,其原理和SQLiteEncrypt一样,都是实现了SQLite的加密相关接口

- 快速只有5 - 15%的性能开销加密
- 100%的数据库中的数据文件是加密的
- 使用良好的安全模式(CBC模式,密钥推导)
- 零配置和应用程序级加密
- OpenSSL加密库提供算法

加密解密过程

SQLite数据库设计中考虑了安全问题并预留了加密相关的接口。但是并没有给出实现。SQLite 数据库源码中通过使用SQLITE_HAS_CODEC宏来控制是否使用数据库加密。并且预留了四个结构让用户自己实现以达到对数据库进行加密的效果。这四个接口分别是:

  • sqlite3_key(): 指定数据库使用的密钥
  • sqlite3_rekey():为数据库重新设定密钥;
  • sqlite3CodecGetKey():返回数据库的当前密钥
  • sqlite3CodecAttach(): 将密钥及页面编码函数与数据库进行关联。

而sqlcipher就是实现这四个接口以及自己的一些接口

解密的操作是以page为单位进行的(每一个page就是db文件的每1024个字节)。

相关文章:

  • x86/x64/x86_64/i386/ia32/ia64/amd/amd64 辨析
  • 理清gcc、libc、libstdc++的关系
  • gcc/g++/clang/cl编译器
  • 深入浅出让你理解什么是LLVM
  • Ninja - chromium核心构建工具
  • depot_tools
  • 智能指针 unique_ptr 详解
  • C++11中“= delete;“的使用
  • C++Error2208:...尝试引用已删除的函数
  • Ninja 构建系统
  • ICU
  • 交叉编译详解
  • GYP,GN和Ninja
  • Visual C++ 新增功能(2003 - 2015)
  • v8引擎编译全记录2021-2-23
  • eclipse(luna)创建web工程
  • ES6简单总结(搭配简单的讲解和小案例)
  • es的写入过程
  • js ES6 求数组的交集,并集,还有差集
  • 百度地图API标注+时间轴组件
  • 关于 Cirru Editor 存储格式
  • 机器学习中为什么要做归一化normalization
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 译有关态射的一切
  • 与 ConTeXt MkIV 官方文档的接驳
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • #QT(一种朴素的计算器实现方法)
  • $.ajax()参数及用法
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (待修改)PyG安装步骤
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (转)iOS字体
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET 解决重复提交问题
  • .Net7 环境安装配置
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .NET实现之(自动更新)
  • .NET委托:一个关于C#的睡前故事
  • /usr/local/nginx/logs/nginx.pid failed (2: No such file or directory)
  • @property @synthesize @dynamic 及相关属性作用探究
  • @RunWith注解作用
  • @Valid和@NotNull字段校验使用
  • [1181]linux两台服务器之间传输文件和文件夹
  • [2018][note]用于超快偏振开关和动态光束分裂的all-optical有源THz超表——
  • [⑧ADRV902x]: Digital Pre-Distortion (DPD)学习笔记
  • [Android 13]Input系列--获取触摸窗口
  • [C++]类和对象(中)
  • [CareerCup] 6.1 Find Heavy Bottle 寻找重瓶子
  • [emuch.net]MatrixComputations(7-12)
  • [GN] Vue3.2 快速上手 ---- 核心语法2
  • [I2C]I2C通信协议详解(二) --- I2C时序及规格指引