转载自:http://www.cnblogs.com/daguo/p/3747858.html
关于sqlite
sqlite加密方式
对数据库加密的思路有两种:
这种方式使用简单,在入库/出库只需要将字段做对应的加解密操作即可,一定程度上解决了将数据赤裸裸暴露的问题。
sqlite加密工具
- RC4
- AES-128inOFBmode
- AES-128inCCMmode
- AES-256inOFBmode
sqlite Encryption Extension (SEE)版本是收费的。
使用AES加密,其原理是实现了开源免费版sqlite没有实现的加密相关接口。
sqliteEncrypt是收费的。
使用256-bit AES加密,其原理和
SQLiteEncrypt一样,都是实现了sqlite的加密相关接口。
sqliteCrypt也是收费的。
sqlCipher分为收费版本和免费版本,官网介绍的区别为:
asier to setup,saving many steps in project configuration
pre-built with a modern version of OpenSSL,avoiding another external dependency
much faster for each build cycle because the library doesn't need to be built from scratch on each compile (build time can be up to 95% faster with the static libraries)
|
在项目中使用sqlCipher
- Nsstring*databasePath=[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)objectAtIndex:0]
- stringByAppendingPathComponent:@"cipher.db"];
- sqlite3*db;
- if(sqlite3_open([databasePathUTF8String],&db)==sqlITE_OK){
- constchar*key=[@"BIGSecret"UTF8String];
- sqlite3_key(db,key,strlen(key));
- intresult=sqlite3_exec(db,(constchar*)"SELECTcount(*)FROMsqlite_master;",NULL,NULL);
- if(result==sqlITE_OK){
- NSLog(@"passwordiscorrect,or,databasehasbeeninitialized");
- }else{
- NSLog(@"incorrectpassword!errCode:%d",result);
- }
- sqlite3_close(db);
- }
需要注意的是,在使用sqlite3_open打开或创建一个数据库,在对数据库做任何其它操作之前,都必须先使用sqlite3_key输入密码,否则会导致数据库操作失败,报出sqlite错误码sqlITE_NOTADB。
- $./sqlcipherplaintext.db
- sqlite>ATTACHDATABASE'encrypted.db'ASencryptedKEY'testkey';
- sqlite>SELECTsqlcipher_export('encrypted');
- sqlite>DETACHDATABASEencrypted;
- $./sqlcipherencrypted.db
- sqlite>PRAGMAkey='testkey';
- sqlite>ATTACHDATABASE'plaintext.db'ASplaintextKEY'';--emptykeywilldisableencryption
- sqlite>SELECTsqlcipher_export('plaintext');
- sqlite>DETACHDATABASEplaintext;
另外,我写了个
SQLCipherDemo工程放到了
CSDN上,有需要的同学请自行下载。
参考文档
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。