Кто-нибудь успешно использовал пароль на базе данных sqlite в Monotouch? - PullRequest
24 голосов
/ 18 ноября 2010

У меня есть приложение Monotouch, которое использует базу данных sqlite.Я хочу зашифровать базу данных, поэтому я делаю это:

_mainConnection = new SqliteConnection("Uri="+finalDB);
_mainConnection.Open();
_mainConnection.ChangePassword("mypassword");

Однако, он не работает (на симуляторе и iphone).Он получает эту ошибку:

в (управляемая оболочкой-в-роде) Mono.Data.Sqlite.UnsafeNativeMethods.sqlite3_rekey (intptr, byte [], int) <0x0005c> в (управляемой оболочке-в-native) Mono.Data.Sqlite.UnsafeNativeMethods.sqlite3_rekey (intptr, byte [], int) <0x0005c> в Mono.Data.Sqlite.SQLite3.ChangePassword (byte []) <0x00053> в Mono.Data.Sqlite.Sll..ChangePassword (byte []) <0x0004b> в Mono.Data.Sqlite.SqliteConnection.ChangePassword (string) <0x0005b>

Кто-нибудь успешно использовал защиту паролем в базе данных sqlite в Monotouch?

Ответы [ 6 ]

3 голосов
/ 04 марта 2012

Согласно моим исследованиям, существует несколько вариантов шифрования базы данных с использованием MonoTouch. У меня есть предстоящий пост в блоге на эту тему, но пока это ваши два лучших варианта:

SQLCipher

Я существенно автоматизировал процесс сборки SQLCipher. Все, что нужно, - это простая команда make, и у вас есть библиотека, которую вы можете добавить в свой проект. Он использует потрясающую библиотеку SQLite-NET. После этого все, что требуется, это указать ключ в файле SQLite.cs.

CSharp-SQLite

Это управляемый порт библиотеки SQLite в C #. Производительность примерно в 2 раза ниже, что довольно здорово, учитывая, что это не нативный код!

1 голос
/ 26 июня 2012

SQLCipher для MonoTouch обеспечивает полное шифрование базы данных для баз данных SQLite.

http://sqlcipher.net/sqlcipher-for-monotouch

Существует также SQLCipher на Mono для Android, который позволяет повторно использовать один и тот же код в приложениях Mono Touch и MonoDroid

http://sqlcipher.net/sqlcipher-for-monodroid

1 голос
/ 04 июля 2011

Попробуйте добавить «; Password = mypassword» в строку подключения и удалите вызов ChangePassword.

Обратите внимание, что по умолчанию реализация sqlite для iPhone не поддерживает шифрование, поэтому команды sqliteдля этого будет no-ops.

Вы можете получить (платную) копию зашифрованной версии sqlite из http://www.hwaci.com/sw/sqlite/see.html, и скомпилировать ее в свое приложение, убедившись, что libsqlite3 удаляется.* .dylib из вашего проекта, если вы связали это в.

Возможно, вам придется немного покопаться в документации Monotouch и / или поэкспериментировать, чтобы убедиться, что сама библиотека Monotouch не включает стандартнуюРеализация sqlite, но на самом деле ссылки на реализацию, которую вы указываете.Сначала попробуйте, если что-то не работает, вот где я бы начал искать.

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

Удачи!

PS: Обратите внимание, что на данный момент не существует сопоставимого решения для Android, это работает на iPhone, поскольку iPhone работает с собственным кодом C.

PPS: Существует также SQLCipher , который утверждает, что шифрует sqlite на iPhone.Однако я обнаружил, что требования к конфигурации для простоты ниже моих стандартов.Я также не уверен, будет ли он правильно вставлен между кодом платформы Monotouch и реализацией sqlite для iPhone по умолчанию.

0 голосов
/ 04 августа 2011

У меня была такая же проблема, но с приложением формы Windows в C #. Я не смог найти решение, поэтому мне пришлось зашифровать данные вручную при сохранении и расшифровать при получении.

0 голосов
/ 20 мая 2011

Вы, вероятно, можете сделать это самостоятельно, введя «прагматический ключ» в необработанном запросе SQLite, то есть если установленная версия SQLite на самом деле является SqlCipher.

0 голосов
/ 04 февраля 2011

Просто мысли вслух, но может ли это быть из-за dynlib sqlite, который поставляется с iPhoneSDK, не являющимся безопасным для потоков?

В качестве альтернативы вы можете попробовать посмотреть на WWDC Vid 209 и просто заблокировать / зашифровать БД, когда находитесь вне приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...