Запись настольного приложения C#, которое должно встроить зашифрованную базу данных. Какую базу данных я должен использовать?

Я не забываю иметь ту же проблему - После поиска в сети, я нашел это решение - Из командной строки,

1. > adb shell
2. # sqlite3 /data/data/com.android.providers.settings/databases/settings.db
3. sqlite> INSERT INTO system VALUES(99,’http_proxy', 'proxy:port');
4. sqlite>.exit

РЕДАКТИРОВАНИЕ: Отредактированный ответ для отражения последней версии Android.

6
задан Community 23 May 2017 в 10:32
поделиться

9 ответов

SQL Server Compact Edition и SQL Lite кажутся вашими двумя основными вариантами. SQL Server Compact имеет лучшую интеграцию с .NET и обработку даты и времени, поэтому я бы выбрал именно его. Кроме того, распространяемые файлы имеют довольно небольшой вес (2–3 МБ IIRC).

SQL Server Compact позволяет зашифровать базу данных:

http://technet.microsoft.com/en-us/library/ ms172901.aspx

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

И последнее примечание: выбор SQL Server Compact позволит вам использовать встроенный поставщик LINQ, который может значительно облегчить вашу жизнь.

11
ответ дан 8 December 2019 в 05:55
поделиться

Вы изучали SQL Server Compact ?

SQL Server Compact 3.5 является бесплатным, простой в использовании встроенный механизм базы данных что позволяет разработчикам создавать надежные Windows для ПК и мобильных устройств приложения, которые работают во всех Windows платформы, включая Windows XP, Vista, Карманный ПК и смартфон.

«Я также не могу заставить пользователя установить для этого отдельную программу» - вы можете распространять необходимые файлы вместе с вашим приложением.

Другое решение - использовать зашифрованный файл xml. Набор данных можно очень легко сохранить и загрузить с помощью файла xml:

5
ответ дан 8 December 2019 в 05:55
поделиться

Этот ответ ПОЛНОСТЬЮ зависит от того, что у вас есть относительно небольшой набор данных , поэтому рассмотрите его соответственно ...

Рассматривали ли вы сохранение своих объектов в коллекции, а затем сериализовать их на диск?

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

Я использовал эту технику в нескольких личных проектах и он отлично работает, ЕСЛИ у вас небольшой набор данных.

Примером является пользовательский поставщик членства, который я написал для ASP.Net, который использует этот метод, если у вас нет доступной базы данных (подумайте очень дешево размещенная среда).

Я тестировал его с нагрузкой до 10 000 пользователей с практически мгновенными ответами (в конце концов, это происходит из памяти). Когда я дойду до 100,

2
ответ дан 8 December 2019 в 05:55
поделиться

Из вашего краткого описания того, как вы будете его использовать, и его однопользовательского характера, возможно, РСУБД будет излишним, вы могли бы просто сохранить свое небольшое количество данные в текстовом / XML-файле и встроить их как ресурс в исполняемый файл (зашифрованный, если необходимо)

1
ответ дан 8 December 2019 в 05:55
поделиться

VistaDB поддерживает xcopy (простое развертывание) с полным шифрованием на уровне базы данных или таблицы.

0
ответ дан 8 December 2019 в 05:55
поделиться

sqlite

SQLite - это программная библиотека, реализует автономный, бессерверная, с нулевой конфигурацией, механизм транзакционной базы данных SQL. SQLite - наиболее широко применяемый SQL движок базы данных в мире. В исходный код SQLite находится в общественное достояние.

sqlite.phxsoftware.com System.Data.SQLite - это исходный движок базы данных SQLite и полный провайдер ADO.NET 2.0 / 3.5, объединенные в единую сборку смешанного режима. Это полная замена исходному sqlite3.dll (вы даже можете переименовать его в sqlite3.dll, если вы используете его изначально).

список доступных оболочек для C # здесь: http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers в разделе оболочек C #

Я использую здесь: Простая оболочка C # для SQLite , которая является базовой, но достаточной для моих нужд

1
ответ дан 8 December 2019 в 05:55
поделиться

Также проверьте Db4o , объектную базу данных с открытым исходным кодом. Они поддерживают шифрование базы данных объектов, а также linq, который упрощает выполнение запросов к данным.

0
ответ дан 8 December 2019 в 05:55
поделиться

jeffa00 указал, что это можно сделать простой сериализацией, если ваш набор данных не очень большой. Вот полная рабочая реализация, показывающая, насколько это просто:

public class DataSerializer<T>
{
  static XmlSerializer _serializer = new XmlSerializer(typeof(T));
  static SymmetricAlgorithm _encryptionAlgorithm;

  public static void SetEncryptionKey(byte[] key)
  {
    _encryptionAlgorithm = Aes.Create();
    _encryptionAlgorithm.Key = key;
  }

  public static void WriteData(string filePath, T data)
  {
    using(var fileStream = File.OpenWrite(filePath))
    {
      var cryptoStream = new CryptoStream(fileStream, _encryptionAlgorithm, CryptoStreamMode.Write);
      _serializer.Serialize(cryptoStream, data);
      cryptoStream.Flush();
    }
  }

  public static T ReadData(string filePath)
  {
    using(var fileStream = File.OpenRead(filePath))
    {
      var cryptoStream = new CryptoStream(fileStream, _encryptionAlgorithm, CryptoStreamMode.Read);
      return (T)_serializer.Deserialize(Stream);
    }
  }
}

С его помощью вы можете сохранить все дерево объектов на диск в зашифрованном виде, просто выполнив:

DataSerializer<MyObjectType>.WriteData(@"c:\somewhere\something.data", myObject);

и прочитав его с помощью:

myObject = DataSerializer<MyObjectType>.ReadData(@"c:\somewhere\something.data");

Это много лучше, чем работать с SQL Server Compact или даже с полным SQL Server, поскольку LINQ to Objects намного мощнее LINQ to SQL. Во многих случаях и быстрее.

Но это работает, только если ваш набор данных легко помещается в ОЗУ.

т очень большой. Вот полная рабочая реализация, показывающая, насколько это просто:

public class DataSerializer<T>
{
  static XmlSerializer _serializer = new XmlSerializer(typeof(T));
  static SymmetricAlgorithm _encryptionAlgorithm;

  public static void SetEncryptionKey(byte[] key)
  {
    _encryptionAlgorithm = Aes.Create();
    _encryptionAlgorithm.Key = key;
  }

  public static void WriteData(string filePath, T data)
  {
    using(var fileStream = File.OpenWrite(filePath))
    {
      var cryptoStream = new CryptoStream(fileStream, _encryptionAlgorithm, CryptoStreamMode.Write);
      _serializer.Serialize(cryptoStream, data);
      cryptoStream.Flush();
    }
  }

  public static T ReadData(string filePath)
  {
    using(var fileStream = File.OpenRead(filePath))
    {
      var cryptoStream = new CryptoStream(fileStream, _encryptionAlgorithm, CryptoStreamMode.Read);
      return (T)_serializer.Deserialize(Stream);
    }
  }
}

С его помощью вы можете сохранить все дерево объектов на диск в зашифрованном виде, просто выполнив:

DataSerializer<MyObjectType>.WriteData(@"c:\somewhere\something.data", myObject);

и прочитав его с помощью:

myObject = DataSerializer<MyObjectType>.ReadData(@"c:\somewhere\something.data");

Это много лучше, чем работать с SQL Server Compact или даже с полным SQL Server, поскольку LINQ to Objects намного мощнее LINQ to SQL. Во многих случаях и быстрее.

Но это работает, только если ваш набор данных легко помещается в ОЗУ.

т очень большой. Вот полная рабочая реализация, чтобы показать, насколько это просто:

public class DataSerializer<T>
{
  static XmlSerializer _serializer = new XmlSerializer(typeof(T));
  static SymmetricAlgorithm _encryptionAlgorithm;

  public static void SetEncryptionKey(byte[] key)
  {
    _encryptionAlgorithm = Aes.Create();
    _encryptionAlgorithm.Key = key;
  }

  public static void WriteData(string filePath, T data)
  {
    using(var fileStream = File.OpenWrite(filePath))
    {
      var cryptoStream = new CryptoStream(fileStream, _encryptionAlgorithm, CryptoStreamMode.Write);
      _serializer.Serialize(cryptoStream, data);
      cryptoStream.Flush();
    }
  }

  public static T ReadData(string filePath)
  {
    using(var fileStream = File.OpenRead(filePath))
    {
      var cryptoStream = new CryptoStream(fileStream, _encryptionAlgorithm, CryptoStreamMode.Read);
      return (T)_serializer.Deserialize(Stream);
    }
  }
}

С его помощью вы можете сохранить все дерево объектов на диск в зашифрованном виде, просто выполнив:

DataSerializer<MyObjectType>.WriteData(@"c:\somewhere\something.data", myObject);

и прочитав его с помощью:

myObject = DataSerializer<MyObjectType>.ReadData(@"c:\somewhere\something.data");

Это много лучше, чем работать с SQL Server Compact или даже с полным SQL Server, поскольку LINQ to Objects намного мощнее LINQ to SQL. Во многих случаях и быстрее.

Но это работает, только если ваш набор данных легко помещается в ОЗУ.

1
ответ дан 8 December 2019 в 05:55
поделиться

Ответ может зависеть от подробностей; тем не менее, C # SQLite ( http://code.google.com/p/csharp-sqlite/ ) может быть вариантом. Если в вашей базе данных будет меньше 4 ГБ данных, тогда SQL Server Compact - идеальный кандидат; без установки, без настройки, развертывание xcopy.

1
ответ дан 8 December 2019 в 05:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: