Проверьте базу данных sqlite перед импортом в приложение для Android - PullRequest
2 голосов
/ 18 марта 2012

У меня есть приложение, в которое я добавил функции экспорта / импорта БД ... Я хочу сделать две вещи:

1) При экспорте: зашифруйте экспортированную базу данных, чтобы обычные люди (я знаю, что некоторые люди могут декодировать лучшие методы камуфляжа) не могут прочитать содержимое ...

2) При импорте: проверьте импортируемый файл, чтобы убедиться, что он будет работать с моим приложением, а не с чем-либо еще.

Я видел здесь несколько ссылок о шифровании, которые могут обратиться к 1-му пункту здесь. Но я не хочу делать шифрование. Я хочу сделать простое карабкаться. И я видел несколько сообщений о проверке содержимого таблицы путем проверки таблиц, которые ищет мое приложение. Это хорошее решение, но мне нужно сначала загрузить файл, чтобы проверить и выполнить откат, если есть ошибки.

Любая помощь будет принята с благодарностью ...

Ответы [ 3 ]

1 голос
/ 18 марта 2012

очень очень простой способ: добавьте заголовок к файлу, который вы позже сможете прочитать, и проверьте:

// w/o exception handling finally etc
String secret = "zomg,secret";
byte[] header = secret.getBytes();
byte[] buffer = new byte[4096];
FileInputStream in = new FileInputStream("/your/sqlite.db");
FileOutputStream out = new FileOutputStream("/sdcard/the.secretfile");
out.write(header);
int read = 0;
while ((read = in.read(buffer)) != -1) {
    out.write(buffer, 0, read);
}
out.close();
in.close();
0 голосов
/ 19 марта 2012

Итак, я наконец-то решил использовать шифрование DES с использованием cipherinputstream и вместо добавления заголовка для проверки целостности я проверяю, присутствуют ли все имена таблиц в импортируемом файле. Я видел, что файл БД sqlite содержит операторы ddl в виде открытого текста. Вероятно, это не самое элегантное / полное решение, но оно работает.

0 голосов
/ 18 марта 2012

Лучший и простой способ справиться с этим - сгенерировать контрольную сумму (MD5) файла базы данных и сравнить ее с рассчитанной. Для получения дополнительной информации

...