diff --git a/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.cpp b/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.cpp
--- a/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.cpp
+++ b/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.cpp
@@ -323,6 +323,20 @@
   }
 }
 
+bool is_database_queryable(sqlite3 *db, bool use_encryption_key) {
+  char *err_msg;
+  sqlite3_open(SQLiteQueryExecutor::sqliteFilePath.c_str(), &db);
+  // According to SQLCipher documentation running some SELECT is the only way to
+  // check for key validity
+  if (use_encryption_key) {
+    set_encryption_key(db);
+  }
+  sqlite3_exec(
+      db, "SELECT COUNT(*) FROM sqlite_master;", nullptr, nullptr, &err_msg);
+  sqlite3_close(db);
+  return !err_msg;
+}
+
 void validate_encryption() {
   std::string temp_encrypted_db_path =
       SQLiteQueryExecutor::sqliteFilePath + "_temp_encrypted";
@@ -355,28 +369,25 @@
   }
 
   sqlite3 *db;
-  sqlite3_open(SQLiteQueryExecutor::sqliteFilePath.c_str(), &db);
-  on_database_open(db);
-
-  char *key_validation_error;
-  // According to SQLCipher documentation running some SELECT is the only way to
-  // check for key validity
-  sqlite3_exec(
-      db,
-      "SELECT COUNT(*) FROM sqlite_master;",
-      nullptr,
-      nullptr,
-      &key_validation_error);
-  sqlite3_close(db);
-
-  if (!key_validation_error) {
+  if (is_database_queryable(db, true)) {
     Logger::log(
         "Database exists under default path and it is correctly encrypted.");
     return;
   }
 
-  Logger::log(
-      "Validation of encryption key failed. Attempting encryption process.");
+  if (!is_database_queryable(db, false)) {
+    Logger::log(
+        "Database exists but it is encrypted with key that was lost. "
+        "Attempting database deletion. New encrypted one will be created.");
+    attempt_delete_file(
+        SQLiteQueryExecutor::sqliteFilePath.c_str(),
+        "Failed to delete database encrypted with lost key.");
+    return;
+  } else {
+    Logger::log(
+        "Database exists but it is not encrypted. Attempting encryption "
+        "process.");
+  }
   sqlite3_open(SQLiteQueryExecutor::sqliteFilePath.c_str(), &db);
 
   std::string createEncryptedCopySQL = "ATTACH DATABASE '" +