void Sqlite::re_key(core::string const& key) { if (key.length()) sqlite3_rekey(d_ptr->db, key.c_str(), key.length()); else sqlite3_rekey(d_ptr->db, NULL, 0); }
int sqlite3_rekey_v2(sqlite3 *db, const char * zDbName, const void *zKey, int nKey) { BOTANSQLITE_TRACE("sqlite3_rekey_v2"); //We don't use zDbName. Pass-through to the old sqlite_rekey (void)(zDbName); return sqlite3_rekey(db, zKey, nKey); }
// Reset the key for the current sqlite database instance. void Database::rekey(const std::string& aNewKey) const { #ifdef SQLITE_HAS_CODEC int pass_len = aNewKey.length(); if (pass_len > 0) { const int ret = sqlite3_rekey(mpSQLite, aNewKey.c_str(), pass_len); check(ret); } else { const int ret = sqlite3_rekey(mpSQLite, nullptr, 0); check(ret); } #else // SQLITE_HAS_CODEC static_cast<void>(aNewKey); // silence unused parameter warning const SQLite::Exception exception("No encryption support, recompile with SQLITE_HAS_CODEC to enable."); throw exception; #endif // SQLITE_HAS_CODEC }
int CppSQLite3DB::resetKey(const char* szPass, int length) { int nRet = sqlite3_rekey(mpDB, szPass, length ); if (nRet != SQLITE_OK) { const char* szError = sqlite3_errmsg(mpDB); throw CppSQLite3Exception(nRet, (char*)szError, DONT_DELETE_MSG); } return nRet; }
void test(int newdb) { const char * sSQL; char * pErrMsg = 0; int ret = 0; sqlite3 * db = 0; if(newdb) { ::DeleteFileA("encrypt.db"); } //创建数据库 ret = sqlite3_open("encrypt.db", &db); //添加密码 if(newdb) { ret = sqlite3_key( db, "dcg", 3 ); } else { ret = sqlite3_key(db, "abc", 3); } //在内存数据库中创建表 sSQL = "create table files(path TEXT PRIMARY KEY, content BLOB, time INTEGER);"; sqlite3_exec( db, sSQL, _callback_exec, 0, &pErrMsg ); if(newdb) { //插入数据 sSQL = "insert into files values(?,?,?);"; sqlite3_stmt* stmt; int src; src = sqlite3_prepare_v2(db, sSQL, strlen(sSQL), &stmt, NULL); src = sqlite3_bind_text(stmt,1, "/global.dat", -1, SQLITE_STATIC); src = sqlite3_bind_blob(stmt,2, "zhaoyun", 7, SQLITE_STATIC); src = sqlite3_bind_int(stmt, 3, 100); src = sqlite3_step(stmt); src = sqlite3_total_changes(db); sqlite3_finalize(stmt); // sqlite3_exec( db, sSQL, _callback_exec, 0, &pErrMsg ); } if(newdb) { ret = sqlite3_rekey( db, "abc", 3); } //取得数据并显示 sSQL = "select * from files;"; sqlite3_exec( db, sSQL, _callback_exec, 0, &pErrMsg ); //关闭数据库 sqlite3_close(db); db = 0; }
void native_rekey_str(JNIEnv* env, jobject object, jstring jKey) { sqlite3 * handle = (sqlite3 *)env->GetIntField(object, offset_db_handle); char const * key = env->GetStringUTFChars(jKey, NULL); jsize keyLen = env->GetStringUTFLength(jKey); if ( keyLen > 0 ) { int status = sqlite3_rekey(handle, key, keyLen); if ( status != SQLITE_OK ) { throw_sqlite3_exception(env, handle); } } env->ReleaseStringUTFChars(jKey, key); }
void native_rekey(JNIEnv* env, jobject object, jbyteArray jKey) { int rc = 0; jsize size = 0; jbyte *key = 0; sqlite3 *handle = NULL; handle = (sqlite3 *)env->GetLongField(object, offset_db_handle); key = env->GetByteArrayElements(jKey, NULL); size = env->GetArrayLength(jKey); if(key == NULL || size == 0) goto done; rc = sqlite3_rekey(handle, key, size); if(rc != SQLITE_OK) { throw_sqlite3_exception(env, handle); } done: if(key) env->ReleaseByteArrayElements(jKey, key, JNI_ABORT); }
void native_rekey_char(JNIEnv* env, jobject object, jcharArray jKey) { char *keyUtf8 = 0; int lenUtf8 = 0; jchar* keyUtf16 = 0; jsize lenUtf16 = 0; UErrorCode status = U_ZERO_ERROR; UConverter *encoding = 0; sqlite3 * handle = (sqlite3 *)env->GetIntField(object, offset_db_handle); keyUtf16 = env->GetCharArrayElements(jKey, 0); lenUtf16 = env->GetArrayLength(jKey); if ( lenUtf16 == 0 ) goto done; encoding = ucnv_open("UTF-8", &status); if( U_FAILURE(status) ) { throw_sqlite3_exception(env, "native_key_char: opening encoding converter failed"); goto done; } lenUtf8 = ucnv_fromUChars(encoding, NULL, 0, keyUtf16, lenUtf16, &status); status = (status == U_BUFFER_OVERFLOW_ERROR) ? U_ZERO_ERROR : status; if( U_FAILURE(status) ) { throw_sqlite3_exception(env, "native_key_char: utf8 length unknown"); goto done; } keyUtf8 = (char*) malloc(lenUtf8 * sizeof(char)); ucnv_fromUChars(encoding, keyUtf8, lenUtf8, keyUtf16, lenUtf16, &status); if( U_FAILURE(status) ) { throw_sqlite3_exception(env, "native_key_char: utf8 conversion failed"); goto done; } if ( sqlite3_rekey(handle, keyUtf8, lenUtf8) != SQLITE_OK ) { throw_sqlite3_exception(env, handle); } done: env->ReleaseCharArrayElements(jKey, keyUtf16, 0); if(encoding != 0) ucnv_close(encoding); if(keyUtf8 != 0) free(keyUtf8); }
bool CppSQLite3DB::rekey(const char* key) { #ifdef SQLITE_HAS_CODEC if (!key) { return false; } int rc = sqlite3_rekey(mpDB, key, (int)strlen(key)); if (rc != SQLITE_OK) { throw CppSQLite3Exception(rc, "rekey error"); } return (rc == SQLITE_OK); #else return false; #endif }
int sqlite3_rekey_v2(sqlite3 *db, const char *zDbName, const void *zKey, int nKey) { return sqlite3_rekey(db, zKey, nKey); }