sqlite3 用SQLCipher 加密后 命令行下如何重新打开和读取

http://sqlcipher.net/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.


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数据库,是一样的道理

本人文章除注明转载外,均为本人原创或编译
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区
转载请注明:文章转载自:开源中国社区 [http://www.oschina.net]
本文标题:sqlite3 用SQLCipher 加密后 命令行下如何重新打开和读取
本文地址:http://my.oschina.net/kjpioo/blog/149290

转载于:https://my.oschina.net/kjpioo/blog/149290

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SQLCipher是一个开源的SQLite扩展库,提供了对SQLite数据库进行加密和解密的功能。它允许用户在SQLite数据库上应用强大的加密算法,以保护敏感数据免受未经授权的访问。 SQLCipher命令行是在命令行界面下使用SQLCipher工具进行数据库操作的方式。要使用SQLCipher命令行,首先需要在系统上安装SQLCipher,并确保可执行文件路径被正确地添加到系统的环境变量中。 使用SQLCipher命令行时,可以执行各种数据库操作,包括创建数据库、创建表、插入数据、查询数据、更新数据和删除数据等。和传统的SQLite命令行类似,SQLCipher命令行使用SQL语句来操作数据库SQLCipher命令行的使用方法与SQLite命令行类似,主要的区别在于SQLCipher命令行需要提供密钥才能打开加密数据库。在使用SQLCipher命令行时,用户可以通过在命令行中输入密码或者通过命令行参数指定密码来提供密钥。密钥的正确性是打开数据库的关键,只有提供正确的密钥,才能成功解密数据库并执行相关的操作。 SQLCipher命令行提供了一种方便快捷的方式来操作和管理加密SQLite数据库。通过使用SQLCipher命令行,用户可以轻松地创建加密数据库,对数据库进行操作,以及保护敏感数据的安全性。 ### 回答2: SQLCipher是一个加密SQLite数据库引擎,可以在命令行中使用。以下是关于SQLCipher命令行的一些重要信息: 1. 安装SQLCipher:在使用SQLCipher之前,需要先安装它。可以去SQLCipher的官方网站下载适用于特定操作系统的安装包,并按照官方文档的指示进行安装。 2. 打开加密数据库:使用SQLCipher命令行时,可以使用以下命令打开已经加密数据库: ```shell sqlcipher path/to/database.db ``` 其中,`path/to/database.db`是数据库文件的路径。 3. 设置密码:在打开数据库之前,需要提供密码来解密数据库。可以使用以下命令设置密码: ```shell PRAGMA key = 'password'; ``` 其中,`password`是你要设置的密码。 4. 执行SQL语句:一旦成功打开加密数据库,并设置了密码,就可以执行SQL语句了。例如,可以使用以下命令查询数据: ```shell SELECT * FROM table_name; ``` 这里的`table_name`是你要查询的表名。 5. 关闭数据库:在完成对数据库的操作后,可以使用以下命令关闭数据库: ```shell .exit ``` 这些是在SQLCipher命令行中的一些基本操作。通过这些命令,可以打开加密数据库,设置密码,执行SQL语句,并最终关闭数据库。 ### 回答3: SQLCipher是一个加密SQLite数据库,它提供了对数据库的高级加密和安全性。命令行是一个在终端中执行命令的方式。SQLCipher命令行是指通过终端执行SQLCipher的命令和操作。 要在命令行中使用SQLCipher,首先需要确保已经正确安装了SQLCipher,并设置好相关的环境变量。然后打开终端,进入到SQLCipher安装目录下的bin文件夹中。 在命令行中,可以使用以下命令来执行SQLCipher操作: 1. 创建或打开一个加密数据库: $ sqlcipher path/to/database.db 2. 设置数据库的密码: > PRAGMA key='your_password'; 3. 执行数据库操作,如查询、插入、更新和删除数据: > SELECT * FROM table; > INSERT INTO table(column1, column2) VALUES(value1, value2); > UPDATE table SET column='new_value' WHERE condition; > DELETE FROM table WHERE condition; 4. 导入和导出数据库: > .output path/to/output.sql > .dump 5. 退出SQLCipher: > .quit 需要注意的是,在执行命令行操作时,应该确保数据库的密码和操作是正确的。另外,为了保证数据库的安全性,应该避免在明文中显示密码。可以在命令行中使用以下命令来隐藏密码输入: $ stty -echo SQLCipher命令行提供了一种简单而灵活的方式来执行SQLCipher操作,可以通过终端直接与数据库进行交互和管理。这对于需要对数据库进行加密和保护的应用程序和系统来说,非常重要和有用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值