Beispiel #1
0
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);
}
Beispiel #2
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);
}
Beispiel #3
0
// 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
}
Beispiel #4
0
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);
}
Beispiel #9
0
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
}
Beispiel #10
0
int sqlite3_rekey_v2(sqlite3 *db, const char *zDbName, const void *zKey, int nKey)
{
  return sqlite3_rekey(db, zKey, nKey);
}