SQLite 加密与不加密性能对比与优化实践

在项目中,为了保证数据安全,我们可能会对 SQLite 数据库进行加密(例如使用 SQLiteMC/SQLCipher)。然而,加密数据库在带来安全性的同时,也会带来显著的性能损耗。本文结合实测与源码分析,介绍 SQLite 加密与不加密的性能差异,并给出参数优化建议。


1. 加密与不加密的性能差异

  • 普通 SQLite

    • 数据库是明文文件,所有读写操作直接进行磁盘 IO。

    • 性能接近原生文件系统,单机场景下插入/查询都非常快。

  • 加密 SQLite (SQLCipher/SQLiteMC)

    • 每个数据库页都需要 加解密

    • 连接时需要进行 KDF(密钥派生函数)迭代计算

    • 在默认配置下,性能可能比普通 SQLite 慢 5~10 倍

也就是说,如果你发现数据库加密后性能急剧下降,这是正常现象,而不是你代码有问题。


2. 加密参数详解

SQLiteMC 提供了一系列配置项,可以调节安全性与性能之间的平衡。

(1) kdfIter — KDF 迭代次数

  • 作用:在打开数据库时,把明文密码转换为实际密钥。

  • 影响:数值越大,破解难度越高,但每次连接都需要更多 CPU 计算。

  • 默认值:256000(非常耗时)。

  • 优化建议:64k ~ 16k;在受控环境下甚至可降到 4k。


(2) pageSize — 数据库页大小

  • 作用:SQLite 以“页”为单位读写,每一页都需要加解密。

  • 影响:页越大,读写时需要解密的次数越少,但每次操作的粒度更粗。

  • 默认值:4096。

  • 优化建议:8192(写多读少时可用 16384)。


(3) HmacAlgorithm & KdfAlgorithm — 哈希算法

  • 作用:保证数据完整性、密钥派生。

  • 常见取值SHA512(默认)、SHA256SHA1

  • 影响:SHA512 最安全但最慢,SHA256 性能提升 30%+,SHA1 更快但安全性较低。

  • 优化建议:SHA256(安全和性能的平衡点)。


(4) withKey — 数据库密钥

  • 设置数据库密码。

  • 需要在所有连接初始化时传入,否则无法访问数据库。


3. 推荐的最优性能配置

如果你对性能有较高要求,同时需要一定的安全性,可以使用如下配置:

SQLiteMCSqlCipherConfig cipherConfig = new SQLiteMCSqlCipherConfig() .getDefault() .getV4Defaults(); // 页大小:8192(比默认 4k 更快) cipherConfig.setLegacyPageSize(8192); // KDF 迭代次数:16000(安全性与性能的折中) cipherConfig.setKdfIter(16000); // 使用 SHA256 替代 SHA512,性能更好 cipherConfig.setHmacAlgorithm(HmacAlgorithm.SHA256); cipherConfig.setKdfAlgorithm(KdfAlgorithm.SHA256); // 设置数据库密钥 cipherConfig.withKey("MySecurePassword!");

📊 预期性能对比

配置插入 10 万条查询 10 万条相对性能
普通 SQLite~1s~0.8s100%
默认加密 (256k+SHA512+4k)~12s~9s10-15%
优化版 (64k+SHA256+8k)~3s~2.5s30-40%
激进版 (16k+SHA256+16k)~1.8s~1.5s50-60%

⚠️ 注意:不同硬件和数据规模下会有差异,但趋势基本一致。

加密依赖

<dependency><groupId>io.github.willena</groupId><artifactId>sqlite-jdbc</artifactId><version>3.49.1.0</version>
</dependency>

不加密依赖

<dependency><groupId>org.xerial</groupId><artifactId>sqlite-jdbc</artifactId><version>3.47.0.0</version>
</dependency>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/96357.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/96357.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Azure官网为何没直接体现专业服务

微软Azure官网没有直接、醒目地展示其专业服务&#xff08;如迁移、定制化解决方案咨询等&#xff09;&#xff0c;确实容易让人疑惑。这背后其实是微软Azure特定的市场策略和商业模式。下面我为你解释原因&#xff0c;并告诉你怎么找到这些服务。&#x1f9e9; 核心原因&#…

人体生理参数信号采集项目——心电信号

1.硬件——焊接调试趣事&#xff1a;由于测量手法问题&#xff0c;以及对示波器不太熟悉&#xff0c;差点以为没信号&#xff0c;都打算重焊一块板子了&#xff0c;但&#xff0c;实际上&#xff0c;信号输出是相对完美的&#xff1b;遇到的疑难杂症&#xff1a;1&#xff09;5…

Go1.25的源码分析-src/runtime/runtime1.go(GMP)g

1. 主要组成部分 Go语言的GMP调度器基于四个核心数据结构&#xff1a;g、m、p和schedt。 1.1 主要常量解读 1.1.1G 状态常量 const (_Gidle iota //刚分配尚未初始化的 G_Grunnable//已在运行队列上&#xff0c;未执行用户代码&#xff1b;栈未被该 G 拥有_Grunning//正在…

使用jwt+redis实现单点登录

首先理一下登录流程 前端登录—>账号密码验证—>成功返回token—>后续请求携带token---->用户异地登录---->本地用户token不能用&#xff0c;不能再访问需要携带token的网页 jwt工具类 package com.nageoffer.shortlink.admin.util;import cn.hutool.core.util.…

Trae配置rules与MCP

这个文章不错&#xff0c;不过如果只是看&#xff0c;还感受不到作者的震撼&#xff0c;所以我自己实操了一下&#xff0c;深受震动&#xff0c;也希望看到这篇文章的人也自己实操一下。 与Cursor结对编程的四个月&#xff0c;我大彻大悟了&#xff01; 学到了什么 无论是熟悉…

对抗攻击与防御:如何保护视觉模型安全?

对抗攻击与防御:如何保护视觉模型安全? 前言 一、对抗攻击的基本原理 二、对抗攻击的主要类型 2.1 白盒攻击 2.2 黑盒攻击 三、对抗攻击的常见形式 3.1 定向攻击 3.2 非定向攻击 四、对抗防御的核心思路 五、常见的对抗防御方法 5.1 对抗训练 5.2 输入预处理 5.3 防御蒸馏 六…

区块链开发:Solidity 智能合约安全审计要点

本文聚焦区块链开发中 Solidity 智能合约的安全审计要点。首先概述智能合约安全审计的重要性&#xff0c;接着详细介绍常见的安全漏洞&#xff0c;如重入攻击、整数溢出与下溢等&#xff0c;以及对应的审计方法。还阐述了审计的具体流程&#xff0c;包括自动化工具检测、手动代…

C++ 新手第一个练手小游戏:井字棋

1. 引言 介于身边有特别多没有学习过编程&#xff0c;或者有一定C语言、python或是Java基础的但是没有接触过C的新手朋友&#xff0c;我想可以通过一个很简单的小项目作为挑战&#xff0c;帮助大家入门C。 今天&#xff0c;我们将挑战一个对新手来说稍微复杂一点&#xff0c;…

透射TEM 新手入门:快速掌握核心技能

目录 简介​ 一、TEM 基本知识 1. 核心原理&#xff08;理解图像本质&#xff09;​ 2. 关键结构与成像模式&#xff08;对应图像类型&#xff09;​ 二、TEM 数据处理 1. 预处理&#xff08;通用步骤&#xff09;​ 2. 衍射花样&#xff08;SAED&#xff09;处理&#x…

day075-MySQL数据库服务安装部署与基础服务管理命令

文章目录0. 老男孩思想-老男孩名言警句1. 数据库服务安装部署1.1 下载安装包1.2 系统环境准备1.2.1 关闭防火墙1.2.2 关闭selinux1.2.3 安装依赖软件1.2.4 卸载冲突软件1.3 安装程序1.3.1 上传软件包1.3.2 配置环境变量1.3.3 创建数据库存储数据目录1.3.4 创建数据库程序管理用…

Qt二维码生成器项目开发教程 - 从零开始构建专业级QR码生成工具

Qt二维码生成器项目开发教程 - 从零开始构建专业级QR码生成工具 项目概述 本项目是一个基于Qt框架开发的专业级二维码生成器&#xff0c;集成了开源的qrencode库&#xff0c;提供完整的QR码生成、预览、保存和分享功能。项目采用C语言开发&#xff0c;使用Qt的信号槽机制实现…

LLaVA-3D,Video-3D LLM,VG-LLM,SPAR论文解读

目录 一、LLaVA-3D 1、概述 2、方法 3、训练过程 4、实验 二、Video-3D LLM 1、概述 2、方法 3、训练过程 4、实验 三、SPAR 1、概述 2、方法 4、实验 四、VG-LLM 1、概述 2、方法 3、方法 4、实验 一、LLaVA-3D 1、概述 空间关系不足&#xff1a;传…

Spring两个核心IoCDI(二)

DI&#xff08;依赖注入&#xff09;就是从IoC容器中获取对象并赋值给某个属性&#xff0c;这就是依赖注入的过程。 关于依赖注入有3种方式&#xff1a; 1、属性注入 2、构造方法注入 3、setter注入 目录 1、属性注入 2、 构造方法注入 3、Setter方法注入 4、3种注入方式优…

广东省省考备考(第八十三天8.21)——言语、判断推理(强化训练)

言语理解与表达 错题解析 文段开篇介绍足够的执法权限对于基层治理高效运行的重要性&#xff0c;接着从两方面进行论证&#xff0c;介绍权限不足和权限过度下放对基层治理的负面影响&#xff0c;最后通过“因此”进行总结&#xff0c;强调一方面要完善执法目录动态调整机制和制…

字符串与算法题详解:最长回文子串、IP 地址转换、字符串排序、蛇形矩阵与字符串加密

字符串与算法题详解&#xff1a;最长回文子串、IP 地址转换、字符串排序、蛇形矩阵与字符串加密 前言 在编程题训练中&#xff0c;字符串相关的题目非常常见。本文将结合几个典型的例题&#xff0c;详细解析它们的解题思路和实现方式&#xff0c;帮助初学者循序渐进地掌握常用技…

从协同设计到绿色制造:工业云渲染的价值闭环

在智能制造、建筑工程、能源电力、船舶海工等工业场景中&#xff0c;3D可视化已从传统的桌面端逐步向Web端迁移&#xff0c;Web 3D凭借其跨平台、轻量化、实时交互等特性&#xff0c;已成为企业构建数字孪生、实现远程协作、推动云端交付的重要工具。这场技术变革不仅改变了工业…

算法第五十一天:图论part02(第十一章)

1.岛屿数量 99. 岛屿数量 &#x1f31f; 思路总结 — DFS 版 1️⃣ 问题本质 给定一个二维矩阵 grid&#xff0c;1 表示陆地&#xff0c;0 表示水 统计岛屿数量&#xff0c;每个岛屿由上下左右相邻的陆地组成 本质是 在二维网格中找连通块 的问题。 2️⃣ 核心思路 遍历矩阵…

杰里708n tws api 简介

/** 通过搜索码搜索tws设备*/int tws_api_search_sibling_by_code();/**打开可发现, 可连接&#xff0c;可被手机和tws搜索到*/int tws_api_wait_pair_by_code(u16 code, const char *name, int timeout_ms);int tws_api_wait_pair_by_ble(u16 code, const char *name, int tim…

高调光比 LED 恒流驱动芯片方案详解AP5165B:36V/1A

AP5165B 是深圳市世微半导体有限公司推出的一款高性能、连续电流模式的降压型&#xff08;Buck&#xff09;LED 恒流驱动芯片。该芯片适用于输入电压高于 LED 电压的应用场景&#xff0c;可驱动单颗或多颗串联的 LED&#xff0c;输出电流最高可达 1A&#xff0c;广泛用于非隔离…

【从零构建企业级线程池管理系统:Python并发编程实战指南】

从零构建企业级线程池管理系统&#xff1a;Python并发编程实战指南 技术博客 | 深入探索Python并发编程、Web开发与现代软件架构设计的完整实践 &#x1f680; 项目背景 在当今高并发的互联网时代&#xff0c;线程池作为并发编程的核心组件&#xff0c;其管理和监控能力直接影…