加入收藏 | 设为首页 | 会员中心 | 我要投稿 武陵站长网 (https://www.50888.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 安全 > 正文

加密

发布时间:2022-10-17 20:00:37 所属栏目:安全 来源:互联网
导读: 加密本文内容
SQLite 在默认情况下不支持加密数据库文件。 而是需要使用修改后的 SQLite 版本,如 SEE、SQLCipher、SQLiteCrypt 或 wxSQLite3。 本文演示如何使用 SQLCipher 的不受支持的开

加密本文内容

SQLite 在默认情况下不支持加密数据库文件。 而是需要使用修改后的 SQLite 版本,如 SEE、SQLCipher、SQLiteCrypt 或 wxSQLite3。 本文演示如何使用 SQLCipher 的不受支持的开放源代码内部版本文档内容加密,但该信息也适用于其他解决方案,因为它们通常遵循相同的模式。

安装

dotnet remove package Microsoft.Data.Sqlite
dotnet add package Microsoft.Data.Sqlite.Core
dotnet add package SQLitePCLRaw.bundle_e_sqlcipher

Remove-Package Microsoft.Data.Sqlite
Install-Package Microsoft.Data.Sqlite.Core
Install-Package SQLitePCLRaw.bundle_e_sqlcipher

有关使用不同的本机库进行加密的详细信息,请参阅自定义 SQLite 版本。

指定密钥

若要对新数据库启用加密,请使用 Password 连接字符串关键字指定密钥。 使用 SqliteConnectionStringBuilder 可从用户输入添加或更新值,并避免连接字符串注入攻击。

var connectionString = new SqliteConnectionStringBuilder(baseConnectionString)
{
    Mode = SqliteOpenMode.ReadWriteCreate,
    Password = password
}.ToString();

提示

加密和解密现有数据库的方法因你使用的解决方案而异。 例如,你需要在 SQLCipher 上使用 sqlcipher_export() 函数。 查看解决方案文档,以了解详细信息。

对数据库重新生成密钥

如果要更改已加密数据库的密钥,请发出 PRAGMA rekey 语句。

遗憾的是,SQLite 在 PRAGMA 语句中不支持参数。 请改用 quote() 函数防止 SQL 注入。

var command = connection.CreateCommand();
command.CommandText = "SELECT quote($newPassword);";
command.Parameters.AddWithValue("$newPassword", newPassword);
var quotedNewPassword = (string)command.ExecuteScalar();
command.CommandText = "PRAGMA rekey = " + quotedNewPassword;
command.Parameters.Clear();
command.ExecuteNonQuery();

(编辑:武陵站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!