You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C# WinForm中使用SQLCipher加密SQLite数据库

在C# WinForm中用SQLCipher加密SQLite数据库实现步骤

1. 初始化加密数据库

如果是新建数据库,创建连接后立即设置密码,数据库会自动完成加密:

using SQLite;
using System.IO;
using System.Windows.Forms;

// 数据库路径,可根据程序目录调整
string dbPath = Path.Combine(Application.StartupPath, "login_credentials.db");
var dbConn = new SQLiteConnection(dbPath);

// 设置加密密码,替换为你的高强度密码
dbConn.Execute("PRAGMA key = 'YourStrongPassword123!';");

// 创建存储账号密码的表(需提前定义实体类)
dbConn.CreateTable<LoginRecord>();

对应的实体类示例:

public class LoginRecord
{
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }
    public string Username { get; set; }
    // 建议对密码做哈希加盐存储,双重保障安全
    public string HashedPassword { get; set; }
}

2. 连接已加密数据库

每次访问加密数据库都必须先验证密码,否则无法读取或写入数据:

var dbConn = new SQLiteConnection(dbPath);
// 先执行密码验证
dbConn.Execute("PRAGMA key = 'YourStrongPassword123!';");

// 执行常规数据操作
// 查询所有记录
var allRecords = dbConn.Table<LoginRecord>().ToList();
// 插入新记录示例
dbConn.Insert(new LoginRecord { Username = "test_user", HashedPassword = "your_hashed_password" });

3. 加密现有未加密数据库

如果之前已有未加密的SQLite数据库,可通过以下步骤转换为加密版本:

string originalDb = "old_unencrypted.db";
string encryptedDb = "new_encrypted.db";
string password = "YourStrongPassword123!";

var originalConn = new SQLiteConnection(originalDb);
// 附加新数据库并设置加密密码
originalConn.Execute($"ATTACH DATABASE '{encryptedDb}' AS encrypted KEY '{password}';");
// 将原数据库数据导出到加密数据库
originalConn.Execute("SELECT sqlcipher_export('encrypted');");
// 分离加密数据库
originalConn.Execute("DETACH DATABASE encrypted;");
originalConn.Close();

// 之后替换程序中的数据库路径为新加密数据库路径即可

关键注意事项

  • 禁止硬编码密码:绝对不能把密码直接写在代码里,可让用户设置主密码,或从Windows凭据管理器等安全存储中读取密钥
  • 密码双重保护:即使数据库加密,存储的密码也要做哈希加盐处理(比如使用BCrypt库),避免数据库泄露后明文密码直接暴露
  • 版本兼容:确保你添加的SQLite.cs文件与sqlite-net-sqlcipher NuGet包版本匹配,避免API冲突

内容的提问来源于stack exchange,提问作者JRMY

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 10:57:20