Kompex::SQLiteDatabase 加密使用
创始人
2025-05-30 13:15:47
0

使用Kompex::SQLiteDatabase的时候,发现并没有加密的接口,可以找对应的wxsqlite的版本,实现加密操作,https://github.com/utelle/wxsqlite3/releases

修改源码如下:

(1)sqlite3.h:

#ifdef SQLITE_HAS_CODEC
/*
** Specify the key for an encrypted database.  This routine should be
** called right after sqlite3_open().
**
** The code to implement this API is not available in the public release
** of SQLite.
*/
SQLITE_API int SQLITE_STDCALL sqlite3_key(
    sqlite3 *db,                   /* Database to be rekeyed */
    const void *pKey, int nKey     /* The key */
    );
SQLITE_API int SQLITE_STDCALL sqlite3_key_v2(
    sqlite3 *db,                   /* Database to be rekeyed */
    const char *zDbName,           /* Name of the database */
    const void *pKey, int nKey     /* The key */
    );

/*
** Change the key on an open database.  If the current database is not
** encrypted, this routine will encrypt it.  If pNew==0 or nNew==0, the
** database is decrypted.
**
** The code to implement this API is not available in the public release
** of SQLite.
*/
SQLITE_API int SQLITE_STDCALL sqlite3_rekey(
    sqlite3 *db,                   /* Database to be rekeyed */
    const void *pKey, int nKey     /* The new key */
    );
SQLITE_API int SQLITE_STDCALL sqlite3_rekey_v2(
    sqlite3 *db,                   /* Database to be rekeyed */
    const char *zDbName,           /* Name of the database */
    const void *pKey, int nKey     /* The new key */
    );

/*
** Specify the activation key for a SEE database.  Unless
** activated, none of the SEE routines will work.
*/
SQLITE_API void SQLITE_STDCALL sqlite3_activate_see(
    const char *zPassPhrase        /* Activation phrase */
    );
#endif

(2)KompexSQLiteDatabase.h

bool Encrypt(const char *strPass);
bool Decrypt(const char *strPass);


bool SQLiteDatabase::Encrypt(const char *strPass)
{
    if (mDatabaseHandle == nullptr)
    {
        return false;
    }
    int result = sqlite3_key(mDatabaseHandle, strPass, strlen(strPass)); //使用密码,第一次为设置密码
    if (result != SQLITE_OK)
    {
        return false;
    }
    return true;
}

bool SQLiteDatabase::Decrypt(const char *strPass)
{
    if (mDatabaseHandle == nullptr)
    {
        return false;
    }
    int result = sqlite3_rekey(mDatabaseHandle, strPass, strlen(strPass));  //重新设置密码
    if (result != SQLITE_OK)
    {
        return false;
    }
    return true;
}

相关内容

热门资讯

大西洋上的七颗明珠?加那利群岛... 加那利群岛宛如璀璨星辰般闪耀在大西洋之上,被誉为“大西洋上的七颗明珠”。这里拥有温暖宜人的气候,常年...
linux语法复习-01天-用... 学习环境推荐使用VMware(搭建linux虚拟机) + XSh...
《中国文旅大联欢》首推“国风文... 21座热门出行城市齐聚、多位文旅专家畅谈行业发展、知名文旅大V深度推荐宝藏出行地……这个端午,和《远...
3.20算法题(一) Leet... 题目链接:算法面试题汇总 - LeetBook - 力扣(LeetCod...
把“乡愁”包进粽子,云南人有自... 如果说粽子是端午的专属美食 那么 云南人有自己的限定款 与常见的“甜咸之争”“奇葩粽”相比 云南的粽...
端午不止粽子香,这些特色习俗你... 央视网消息:端午时节,除了赛龙舟,各地民俗也各具特色。挂香囊、系彩绳、沐兰汤,粽香串起南北风味,尽显...
win10系统安装kafka(... 目录 安装步骤 问题一:Zookeeper audit is disabled 问题二...
安龙县春潭二小:童梦飞扬迎六一... 端午之际,绿意盎然,艾草的芳香弥漫在大街小巷。 “我也会包粽子,煮出来的味道和妈妈包的一样好吃。” ...
原创 端... “五月五,是端阳。门插艾,香满堂。”端午的脚步是越来越近了,家家户户都开始张罗着包粽子。可您知道吗?...
如何用Kendo UI实现一个... Kendo UI是带有jQuery、Angular、React和Vue库的JavaScript UI...
无座票购买攻略轻松掌握抢票技巧... 无座票购买攻略:轻松掌握抢票技巧,享受舒适旅程 随着高铁和动车的普及,越来越多的人选择乘坐火车出行。...
鲁源一脉承千年,尼山文旅启新章... 2025年5月31日,在孔子登临观世的精神原乡——尼山脚下,鲁源村景区以一场融合传统礼乐与现代光影的...
突发!南航一航班杭州起飞15分... 5月31日13时许,中国南方航空官方微博发布通报: 5月31日,CZ6850杭州飞往深圳的航班上,一...
Docker 部署 MySQL 1. 进入下面路径下  -v 使用相对路径的方式挂载的目录docker会自动创建,路...
九龙证券|搭上AIGC快车,万... 组织以为,游戏职业处于前史问题出清且估值偏低的新起点。   网络游戏与AI的交融&#x...
unordered系列的关联式... 在C++98中,STL提供了底层为红黑树结构的一系列关联式容器...
快速入手优先队列 一.理解优先队列标准模板库(Standard Template Library,STL...
三大政策礼包“涨粉”济宁文旅 5月29日,2025济宁市建设世界文化旅游名城暨文旅产业高质量发展大会在济宁太白湖新区方特东方欲晓开...