Member 14668576 Ответов: 2

Как я могу получить доступ к зашифрованной базе данных sqlite?


Я пытаюсь создать программу, которая взаимодействует с базой данных SQLite, зашифрованной паролем. Если я попробую с БД без какого-либо пароля она работает, но с базой данных с паролем, после подключения, при выполнении запроса она выдает ошибку "файл не является базой данных". У вас есть какой-нибудь совет?

Что я уже пробовал:

using Microsoft.Data.Sqlite;
using System;
using System.Data.SQLite;

...

string conn = "Data Source=C:\\Users\\Utente\\Desktop\\SQLite\\sqlite tools\\DB\\provapassword.db;";
SqliteConnection sql_conn = new SqliteConnection(conn);
sql_conn.Open();
Console.WriteLine("Connected to provapassword");
var cmd = sql_conn.CreateCommand();
cmd.CommandText = "SELECT quote($password);";
cmd.Parameters.AddWithValue("$password", "prova");
var quotedPassword = (string)cmd.ExecuteScalar();
cmd.CommandText = "PRAGMA key = " + quotedPassword;
cmd.Parameters.Clear();
cmd.ExecuteNonQuery();                  
try
{     
//INSERT
string query = "INSERT INTO nomi values(10, \"AAA\")";
cmd.CommandText = query;
if (cmd.ExecuteNonQuery() != 0)
    Console.WriteLine("OK");
else
    Console.WriteLine("Error");
sql_conn.Close();
Console.WriteLine("Connection close"); 
}
catch (Exception e)
{
   Console.WriteLine(e.Message.ToString());
}

2 Ответов

Рейтинг:
2

OriginalGriff

Если вы не знаете пароль, вы не можете получить доступ к файлу - вот и вся идея.
Поэтому, если вы попытаетесь открыть его без предоставления какого-либо пароля или дадите неправильный пароль, расшифровка завершится неудачей, и вы получите ошибку "не база данных".

Это может помочь: Шифрование в Microsoft.Data.Sqlite | блог Брайса[^]


Member 14668576

Хорошо, но я знаю пароль, это "Прова". Но в любом случае это не работает

Рейтинг:
2

Dave Kreskowiak

Вы должны указать пароль к базе данных в строке подключения, а не в запросе SELECT.

Data Source=C:\\Users\\...\\DB\\provapassword.db;Password=password


Member 14668576

Я тоже пробовал это сделать, но это дает мне такую ошибку: "не удается использовать свойство строки подключения "пароль": библиотека не была построена с поддержкой шифрования, пожалуйста, смотрите". https://www.sqlite.org/see" для получения дополнительной информации"
Я пробовал как с Microsoft.Data.Sqlite, так и с System.Data.SQLite

Dave Kreskowiak

Ну, после просмотра Sqlite кажется, что полное шифрование базы данных-это полный беспорядок.

Я предполагал, что вы используете Sqlite.NET, вместо того чтобы смотреть на ваши операторы using в верхней части кода. Часть пароля строки подключения не поддерживается поставщиками Microsoft.

Вы можете получить sqlite.net из NuGet. Читайте здесь -> https://github.com/praeclarum/sqlite-net