在这篇文章中,我们将为您详细介绍sqlite3用SQLCipher加密后命令行下如何重新打开和读取的内容。此外,我们还会涉及一些关于c–SQLite是否使用SQLCipher扩展名泄漏内存?、c–如何
在这篇文章中,我们将为您详细介绍sqlite3 用SQLCipher 加密后 命令行下如何重新打开和读取的内容。此外,我们还会涉及一些关于c – SQLite是否使用SQLCipher扩展名泄漏内存?、c – 如何从(iOS到Windows)等其他平台打开和读取SQLite数据库、CentOS下php通过SQLCipher编译sqlite3支持数据库加密、CoreData加密,使用SQLCipher的知识,以帮助您更全面地了解这个主题。
本文目录一览:- sqlite3 用SQLCipher 加密后 命令行下如何重新打开和读取
- c – SQLite是否使用SQLCipher扩展名泄漏内存?
- c – 如何从(iOS到Windows)等其他平台打开和读取SQLite数据库
- CentOS下php通过SQLCipher编译sqlite3支持数据库加密
- CoreData加密,使用SQLCipher
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
c – SQLite是否使用SQLCipher扩展名泄漏内存?
#include <sqlite3.h> int main() { sqlite3 * connection; sqlite3_open_v2(":memory:",&connection,sqlITE_OPEN_READWRITE | sqlITE_OPEN_CREATE,NULL); sqlite3_key(connection,"passphrase",10); sqlite3_close(connection); }
此示例产生内存泄漏.如果我删除对sqlite3_key的调用,内存泄漏就会消失.
我已经缩小了一些可能的罪魁祸首:
>虽然示例使用内存数据库(因此“:memory:”),但在使用基于文件的数据库时,我看到了相同的结果.
> sqlite3_ *调用的所有返回码都是sqlITE_OK,这意味着没有任何错误.
>“密码”的缓冲区长度为10不是问题.
但是,无论我创建多少个连接或使用多少个不同的加密密钥,内存泄漏总是大约8千字节.这让我怀疑这实际上并不是内存泄漏,而是sqlite / sqlCipher中的一些常量全局内存,它们不会被手动释放.
有谁之前经历过这个吗?有没有办法摆脱泄漏?即使这不是官方的内存泄漏,也很难用这种方法检测真正的内存泄漏.
我正在使用SQLCipher library for Windows.
解决方法
作为sqlCipher下一版本之前的快速解决方法,您可以在退出之前在程序中手动调用EVP_cleanup().
c – 如何从(iOS到Windows)等其他平台打开和读取SQLite数据库
iOS数据库使用名为sqlite3_key()的sqlite API进行加密.
但是,当我尝试在我的MFC应用程序中打开相同的iOS数据库时,它会抛出异常,说文件已加密或不是数据库,无法从数据库中读取数据.
iOS数据库将由MFC应用程序从DropBox下载,并将替换当前数据库并使用它而不是之前的数据库
我使用以下代码使用CppSqlite3
Wrapper为sqlite打开数据库:
Cppsqlite3DB db; try{ db.open("mydb.db"); TRACE(_T("database opened")); db.key("1234",strlen("1234")); }catch(Cppsqlite3Exception e){ return NULL; }
由于Cppsqlite3DB类没有名为key()的函数.我在课堂上添加了这个功能
void Cppsqlite3DB::key(const char* szKey,int nKey) { if (mpDB) { sqlite3_key(mpDB,szKey,nKey); } }
并将我的库升级到SQLiteEncrypt.
iOS应用程序使用SQLCipher
进行数据库.
但是,结果是一样的.所以,
谁能告诉我如何实现这一目标?
先感谢您.
解决方法
sqlCipher has broad platform support for [..] 07001 [..] 07002 [..]
也许在Windows应用程序中使用sqlCipher可以解决不兼容问题.
CentOS下php通过SQLCipher编译sqlite3支持数据库加密
最近由于项目需要,要对服务器端生成的sqlite进行加密.服务器后台用的是php写的,操作系统为centos.开源的sqlite3预留了数据库加密接口,但是没有实现.于是在网上找到了sqlcipher,它对sqlite3未实现的加密功能进行了实现,并且可以通过重新编译php的sqlite3扩展,从而支持sqlite数据库加密.
具体操作,可参考官网的步骤进行,地址:https://www.zetetic.net/sqlcipher/sqlcipher-for-php/
官网的操作,系统是用的
立即学习“PHP免费学习笔记(深入)”;
点击下载“修复打印机驱动工具”;
版权声明:本文为博主原创文章,未经博主允许不得转载。
以上就介绍了CentOS下php通过SQLCipher编译sqlite3支持数据库加密,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。
CoreData加密,使用SQLCipher
关键是使用SQLCipher,→GitHub地址
一、添加SQLCipher到项目中
使用CocoaPod:
pod ''EncryptedCoreData'', :git => ''https://github.com/project-imas/encrypted-core-data.git''
二、在 AppDelegate.m 添加
#import "EncryptedStore.h"
三、替换coordinator
NSPersistentStoreCoordinator *coordinator = [EncryptedStore makeStore:[self managedObjectModel] passcode:@"你的密码"];
具体还有几个用法,在GitHub主页可以看到.
Mac如何查看使用SQLCipher加密数据库文件:
还是在GitHub,SqliteDatabaseViewer
加密测试demo下载
今天关于sqlite3 用SQLCipher 加密后 命令行下如何重新打开和读取的分享就到这里,希望大家有所收获,若想了解更多关于c – SQLite是否使用SQLCipher扩展名泄漏内存?、c – 如何从(iOS到Windows)等其他平台打开和读取SQLite数据库、CentOS下php通过SQLCipher编译sqlite3支持数据库加密、CoreData加密,使用SQLCipher等相关知识,可以在本站进行查询。
本文标签: