sqlcipher 命令列使用及工具下載
sqlcipher 加密資料庫後想要檢視資料庫 ,需使用使用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. 解密資料庫
$ 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> 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.
相關文章
- modelscope 命令列工具下載模型命令列模型
- 如何在命令列中使用 ftp 命令上傳和下載檔案命令列FTP
- Linux基礎命令---wget下載工具Linuxwget
- 使用node.js構建命令列工具Node.js命令列
- 在 Linux 命令列下使用“原力”Linux命令列
- ROS命令列工具ROS命令列
- ftp下載工具,ftp下載工具哪個好用,如何使用?FTP
- 下載工具使用總結
- JDK的下載及安裝與Eclipse的下載及使用JDKEclipse
- Click: 命令列工具神器命令列
- EFCore之命令列工具命令列
- 如何使用curl命令下載檔案
- 用 nodejs 寫一個命令列工具 :建立 react 元件的命令列工具NodeJS命令列React元件
- 如何使用命令列工具檢查資料庫?命令列資料庫
- 釘釘直播回放一鍵下載工具使用教程(2024最新下載工具)
- 做ftp專案中使用命令列引數及 ----python 命令列 解析模組 optparseFTP命令列Python
- 用 PHP 寫一個命令列音樂下載器PHP命令列
- JDK常用的命令列工具JDK命令列
- Git 命令列使用Git命令列
- Windows下用命令列工具ADRCI跟蹤日誌檔案Windows命令列
- Dutree – Linux上的命令列磁碟使用情況分析工具Linux命令列
- Apache歷理 phpStudy下載及使用ApachePHP
- Mac 下在命令列下使用 PHPStorm 開啟專案Mac命令列PHPORM
- Vue-cli 命令列工具分析Vue命令列
- node.js 命令列工具(cli)Node.js命令列
- 俚語搜尋命令列工具命令列
- web3j命令列工具Web命令列
- Cobra 庫上手—自建命令列工具命令列
- 命令列郵件傳送工具命令列
- go Cobra命令列工具入門Go命令列
- python製作命令列工具——firePython命令列
- JVM 常用命令列工具JVM命令列
- golang常用庫:cli命令列/應用程式生成工具-cobra使用Golang命令列
- 綠色ftp工具,綠色ftp工具下載,使用教程。FTP
- 命令列使用小結命令列
- zookeeper使用(一)--命令列命令列
- sqlcipher加密sqlite後iOS環境下FMDB效能影響加密SQLiteiOS
- Linux系統下ifconfig命令使用及結果分析Linux
- SQLCipher之攻與防SQL