sqlcipher加密原理_sqlserver数据库加密

sqlcipher加密原理_sqlserver数据库加密使用 sqlcipher.exe可以在输入密码后,查看加密数据库的内容。但是要编码查询数据库的内容,还要另寻方法。(相关的工具和库在我的百度网盘中)使用sqlcipherwindow

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

使用 sqlcipher.exe 可以在输入密码后,查看加密数据库的内容。

但是要编码查询数据库的内容,还要另寻方法。(相关的工具和库在我的百度网盘中)

使用sqlcipher windows 命令工具

注意 使用的工具也分版本,要与加密数据库的版本对应起来,否则查看不到表

 

下载地址:

对应2.x

http://download.csdn.net/detail/zhanghw0917/7931759

3.01版本

http://download.csdn.net/detail/zhanghw0917/7931909

 

转载 http://www.cnblogs.com/treecat-roboto/p/3873707.html

加密后使用命令行还是可以查看滴

 

1. 创建加密数据库
$ sqlcipher encrypted.db
SQLCipher version 3.8.4.3 2014-04-03 16:53:12
Enter “.help” for instructions
Enter SQL statements terminated with a “;”
sqlite> PRAGMA key = ‘thisiskey’;
sqlite> create table encrypted (id integer, name text);
sqlite> .schema
CREATE TABLE encrypted (id integer, name text);
sqlite> .q

2. 打开加密数据库
$ sqlcipher encrypted.db
SQLCipher version 3.8.4.3 2014-04-03 16:53:12
Enter “.help” for instructions
Enter SQL statements terminated with a “;”
sqlite> PRAGMA key = ‘thisiskey’;
sqlite> .schema
CREATE TABLE encrypted (id integer, name text);

3. 修改数据库密码

 sqlite> PRAGMA rekey = ‘newkey’;

 4. 加密已有的数据库
 $ sqlcipher banklist.sqlite3 
SQLCipher version 3.8.4.3 2014-04-03 16:53:12
Enter “.help” for instructions
Enter SQL statements terminated with a “;”
sqlite> ATTACH DATABASE ‘encrypted.db’ AS encrypted KEY ‘thisiskey’;
sqlite> SELECT sqlcipher_export(‘encrypted’);
sqlite> DETACH DATABASE encrypted;

5. 解密数据库(生成无密码的数据库: plaintext.db)
$ sqlcipher-shell32 encrypted.db 

sqlite> PRAGMA key = ‘thisiskey’;
sqlite> ATTACH DATABASE ‘plaintext.db’ AS plaintext KEY ”;
sqlite> SELECT sqlcipher_export(‘plaintext’);
sqlite> DETACH DATABASE plaintext;

 

 

 转自 : http://my.oschina.net/kjpioo/blog/149290

 

satckoverflow.com上有人提到过在

sqlite> sqlcipher-shell32.exe  test.db

sqlite> PRAGMA KEY = ‘12345’;

给刚打开的数据库设置密码后,马上接着往数据库执行create table和 insert操作。最后用

sqlite> .e

退出该数据库。但是下次再用

sqlite> sqlcipher-shell32.exe  test.db

登录,在输入密码前执行了.schema等其他操作

sqlite>.schema

Error: file is encrypted or is not a database

sqlite> PRAGMA KEY = ‘12345’;

Error: file is encrypted or is not a database

遭到提示:Error: file is encrypted or is not a database

 

根据官方以上英文描述,这个问题就是因为操作上没有遵循just-in-time key derivation的要求,没有首先输密码解密再进行其他操作。

有图为证:

—————-以下为正确操作过程:

SQLite version 3.7.15.2 2013-01-09 11:53:05
Enter “.help” for instructions
Enter SQL statements terminated with a “;”
sqlite> PRAGMA KEY = ‘12345’;
sqlite> .schema
CREATE TABLE t(name text);
sqlite> select * from t;
n1
sqlite>

—————-以下为错误操作过程:

Enter SQL statements terminated with a “;”
sqlite> .schema
Error: file is encrypted or is not a database
sqlite> PRAGMA KEY = ‘12345’;
sqlite> .schema
Error: file is encrypted or is not a database
sqlite>

确实如此。

以上过程你可以自己亲自验证以下。

注意:通过命令行( sqlcipher-shell32.exe) 执行命令,与通过sqlite3 api调用操作sqlite3数据库,是一样的道理

 

 

 

参考:

https://www.zetetic.net/sqlcipher/sqlcipher-api/#key

 

PRAGMA key 

 

The process of creating a new, encrypted database is called “keying” the database. SQLCipher uses just-in-time key derivation at the point it is first needed for an operation. This means that the key (and any options) must be set before the first operation on the database. As soon as the database is touched (e.g. SELECT, CREATE TABLE, UPDATE, etc.) and pages need to be read or written, the key is prepared for use.

Example 1: Passphrase with Key Derivation

The key itself can be a passphrase, which is converted to a key using PBKDF2 key derivation. The result is used as the encryption key for the database.

sqlite> PRAGMA key = 'passphrase';

Example 2: Raw Key Data (Without Key Derivation)

Alternatively, it is possible to specify an exact byte sequence using a blob literal. With this method, it is the calling application’s responsibility to ensure that the data provided is a 64 character hex string, which will be converted directly to 32 bytes (256 bits) of key data.

sqlite> PRAGMA key = "x'2DD29CA851E7B56E4697B0E1F08507293D761A05CE4D1B628663F411A8086D99'";

Testing the Key

When opening an existing database, PRAGMA key will not immediately throw an error if the key provided is incorrect. To test that the database can be successfully opened with the provided key, it is necessary to perform some operation on the database (i.e. read from it) and confirm it is success.

The easiest way to do this is select off the sqlite_master table, which will attempt to read the first page of the database and will parse the schema.

sqlite> PRAGMA key = 'passphrase';
sqlite> SELECT count(*) FROM sqlite_master; -- if this throws an error, the key was incorrect. If it succeeds and returns a numeric value, the key is correct;

The same check can be implemented in C code

sqlite3_key(database, "test123", 7);
if (sqlite3_exec(database, "SELECT count(*) FROM sqlite_master;", NULL, NULL, NULL) == SQLITE_OK) {
  // key is correct.
} else {
  // key is incorrect
}

Implementation Notes

  • PRAGMA key should generally be called as the first operation on a database.
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/166996.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • nodejs安装与环境变量配置[通俗易懂]

    nodejs安装与环境变量配置[通俗易懂]NodeJsNode.js简介发展史特性模块下载nodejs系统环境nodejs(msi)方式的安装nodejs(zip)方式的安装环境配置Linux下安装Node测试参考资料Node.js简介Node是一个让JavaScript运行在服务端的开发平台,它让JavaScript成为与PHP、Python、Perl、Ruby等服务端语言平起平坐的脚本语言。发布于2009年5月,由R…

  • Python生成exe文件的方法及步骤

    Python生成exe文件的方法及步骤为什么要生成可执行文件不需要安装对应的编程环境 可以将你的应用闭源 用户可以方便、快捷的直接使用打包工具pyinstaller安装pyinstaller如果你的网络稳定,通常直接使用下面的命令安装即可:pipinstallpyinstaller检查pyinstaller安装成功与否:只需要执行如下命令其中一个即可:pyinstaller-vpyi…

  • 选择排序

    选择排序

    2021年12月16日
  • 卡内基-沟通的艺术

    卡内基-沟通的艺术

  • unixbench分析_燕青: Unixbench 测试套件缺陷深度分析

    unixbench分析_燕青: Unixbench 测试套件缺陷深度分析原标题:燕青:Unixbench测试套件缺陷深度分析本文摘要本文通过实验论证:Unixbench的Pipe-basedContextSwitching用例受操作系统调度算法的影响波动很大,甚至出现了虚拟机跑分超过物理机的情况。在云计算时代,当前的Unixbench已不能真实地反映被测系统的真实性能,需要针对多核服务器和云计算环境进行完善。简单的说,视操作系统多核负载均衡策略的差异,该用例可…

    2022年10月28日
  • pycharm怎么导入数据库_pycharm导入python

    pycharm怎么导入数据库_pycharm导入python记录一下自己最近一段时间可能用不上的代码,免得以后再找起来麻烦。pycharm连接数据库首先在找到Database,选择连接自己下载的数据库软件。填写完自己的数据库密码后,如果正确的话,就会出现下面这张图。点下“刷新”按钮后即可连接数据库。测试是否连接成功。到这里基本完成了外部数据导入步骤。2.代码importpymysqlimportmath#用来操作数据库的类classclimb_test_DataInput(object):#…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号