当前位置: 首页 > news >正文

网页设计公司网站制作/网站seo关键词排名

网页设计公司网站制作,网站seo关键词排名,高并发网站建设,厦门网站制作推广sqlite3加密支持 sqlite3免费版并不支持加密,不过留有接口,有不少开源的加密实现,不过有的需要使用openssl配置略显繁琐,不过使用wxsqlite比较方便。 wxSqlite3 wxSqlite3是wxWidgets的扩展组件,对sqlite3的C API进行了…

sqlite3加密支持

sqlite3免费版并不支持加密,不过留有接口,有不少开源的加密实现,不过有的需要使用openssl配置略显繁琐,不过使用wxsqlite比较方便。

wxSqlite3

wxSqlite3是wxWidgets的扩展组件,对sqlite3的C API进行了封装,并且实现了加解密功能。
目前支持两种算法,AES128算法(默认)和AES256算法
wxSqlite在secure/src/sqlite3secure.c中引入了其他源文件,这样你只用编译sqlite3secure.c就可以了,但是这样有时会比较麻烦。

sqlite3-secure

项目地址
我这里说的sqlite3-secure就是从wxSqlite3中提取的,只不过做了些修改,更加方便使用,直接添加到工程中就可以了。
而且使用起来仍然使用sqlite3的C API,没有什么C++的封装。

经过测试的系统:Mac OS X, iOS, Android

修改了什么?

  • 将不用添加到工程的C源文件后缀名改为ccode(要不然得屏蔽编译这些文件,否则会出现符号重复的错误)
  • 默认启用加密支持(添加启用加密的宏)
  • 删除了wxsqlite的C++封装,只提供原生sqlite3-api
  • 删除了shell.c(编译shell命令工具sqlite的代码)
  • 整理了目录结构

加密解密API

// 解密或用于第一次加密
int sqlite3_key(sqlite3 *db, const void *zKey, int nKey);
// 重设密码
int sqlite3_rekey(sqlite3 *db, const void *zKey, int nKey);

注意:

  • 第一次创建数据库,使用sqlite3_key或者sqlite3_rekey都可以设置密码
  • 必须在sqlite3_open成功之后,使用sqlite3_key进行解密
  • 要重新设置密码(sqlite3_rekey),必须解密成功后才可以进行
  • 一般不重设密码的话,只使用sqlite3_key就够了

DEMO

//
//  main.cpp
//  sqlite3
//
//  Created by Luwei on 15/1/9.
//  Copyright (c) 2015年 Luwei. All rights reserved.
//

#include <iostream>#include "sqlite3-secure/sqlite3.h"void db_open(sqlite3 **ppDb, const std::string &path);
void db_close(sqlite3 *pDb);
void db_encrypt(sqlite3 *pDb, const std::string &password);// DEMO
void db_createtable(sqlite3 *pDb);
void db_insert(sqlite3 *pDb);
void db_delete(sqlite3 *pDb);
void db_update(sqlite3 *pDb);
void db_select(sqlite3 *pDb);int main()
{std::string path = "/Users/etime/Documents/db";std::string password = "hello,world";sqlite3 *pDb = nullptr;try {db_open(&pDb, path);db_encrypt(pDb, password);db_createtable(pDb);db_insert(pDb);db_delete(pDb);db_update(pDb);db_select(pDb);db_close(pDb);}catch (const char *what) {printf("[DB Error]: %s\n", what);sqlite3_close(pDb);return -1;}return 0;
}void db_open(sqlite3 **ppDb, const std::string &path) {int c = SQLITE_OK;if (path.empty())c = sqlite3_open(":memory", ppDb);elsec = sqlite3_open(path.c_str(), ppDb);if (c != SQLITE_OK)throw sqlite3_errmsg(*ppDb);
}void db_close(sqlite3 *pDb) {int c = sqlite3_close(pDb);if (c != SQLITE_OK)throw sqlite3_errmsg(pDb);
}void db_encrypt(sqlite3 *pDb, const std::string &password) {int c = SQLITE_OK;if (password.empty())return;elsec = sqlite3_key(pDb, password.c_str(), (int)password.length());if (c != SQLITE_OK)throw sqlite3_errmsg(pDb);// sqlite3_rekey()
}void db_createtable(sqlite3 *pDb) {const char *sql =   "CREATE TABLE IF NOT EXISTS user""([id] INTEGER PRIMARY KEY, name TEXT)";int c = sqlite3_exec(pDb, sql, nullptr, nullptr, nullptr);if (c != SQLITE_OK)throw sqlite3_errmsg(pDb);
}void db_insert(sqlite3 *pDb) {const char *sql = "INSERT INTO user values(NULL, 'luweimy')";int c = sqlite3_exec(pDb, sql, nullptr, nullptr, nullptr);if (c != SQLITE_OK)throw sqlite3_errmsg(pDb);int count = sqlite3_changes(pDb);printf("[DB Log]: <INSERT> %d item changes\n", count);
}void db_delete(sqlite3 *pDb) {const char *sql = "DELETE FROM user WHERE id=2";int c = sqlite3_exec(pDb, sql, nullptr, nullptr, nullptr);if (c != SQLITE_OK)throw sqlite3_errmsg(pDb);int count = sqlite3_changes(pDb);printf("[DB Log]: <DELETE> %d item changes\n", count);
}void db_update(sqlite3 *pDb) {const char *sql = "UPDATE user SET name=\"**luweimy**\" WHERE id=1";int c = sqlite3_exec(pDb, sql, nullptr, nullptr, nullptr);if (c != SQLITE_OK)throw sqlite3_errmsg(pDb);int count = sqlite3_changes(pDb);printf("[DB Log]: <UPADTE> %d item changes\n", count);
}void db_select(sqlite3 *pDb) {const char *sql = "SELECT * FROM user";sqlite3_stmt *pStmt = nullptr;int c = sqlite3_prepare_v2(pDb, sql, (int)strlen(sql), &pStmt, nullptr);if (c != SQLITE_OK)throw sqlite3_errmsg(pDb);c = sqlite3_step(pStmt);if (c != SQLITE_ROW && c != SQLITE_DONE)throw sqlite3_errmsg(pDb);int colnum = sqlite3_column_count(pStmt);while (c == SQLITE_ROW) {for (int i = 0; i < colnum; i++) {printf("%s \t \t", sqlite3_column_text(pStmt, i));}printf("\n");c = sqlite3_step(pStmt);}if (c != SQLITE_DONE)throw sqlite3_errmsg(pDb);c = sqlite3_finalize(pStmt);if (c != SQLITE_OK)throw sqlite3_errmsg(pDb);
}

 

转载于:https://www.cnblogs.com/luweimy/p/4214663.html

http://www.lbrq.cn/news/1577017.html

相关文章:

  • 英文网站后台维护/seo是搜索引擎优化
  • 网站托管做的好的公司/免费行情网站大全搜狐网
  • 怎么设置网站字体/企业网站建设的流程
  • 网站开发需要几个域名/今天的新闻摘抄
  • 怎么判断网站优化过度/现在网络推广方式
  • 黑龙江新闻网最新消息/seo是对网站进行什么优化
  • 邯郸做网站网络公司/关键词seo优化软件
  • 番禺网站开发哪家专业/网络推广是什么工作
  • 石家庄有哪些公司可以做网站/上海seo公司哪家好
  • 网站设计 导航条/广州抖音推广
  • 做网站卖东西流程/bt兔子磁力天堂
  • 上海猎头公司前十名/百度首页排名优化哪家专业
  • 超可爱做头像的网站/大众点评seo关键词优化
  • macbook做网站开发/seo外推软件
  • 哪家做网站靠谱/熊猫关键词工具
  • 做网站协议书/全网霸屏推广系统
  • 热门的网站模板下载/软文代写平台
  • wordpress 登出/百度词条优化工作
  • 运河建设管理网站/seo入门培训学校
  • 好的网站分享/做网站多少钱
  • 广州网站建设哪里买/适合发表个人文章的平台
  • 外国服务器的网站/2022年最火的关键词
  • 外贸网站案例/怎么推广软件让别人下载
  • 做flash网站/数字营销案例
  • 装饰设计公司哪个好/seo综合查询中的具体内容有哪些
  • 电商创客网站建设方案/湖南网站建设推广
  • 网站开发实训基本要求/网站优化推广是什么
  • 网站底部放什么/网络营销师资格证报名
  • 哪里做网站排名/百度关键词搜索排名帝搜软件
  • 政府网站建设及管理规范 云南/shopify seo
  • provide()函数和inject()函数
  • linux 执行ls命令文件夹显示全白色
  • 串口通信“第二次总超时”的复盘
  • 【Unity3D实例-功能-下蹲】角色下蹲(二)穿越隧道
  • 小红书笔记信息获取_实在智能RPA源码解读
  • Spring Boot项目使用WebClient调用第三方接口详细教程