2013-12-23 3 views
0

Я создал зашифрованную базу данных с использованием C# -SQLite после прочтения ее совместимости с SQLCipher. Я использую следующую команду для шифрования:SQLCipher Android и шифрование с шестью ключами

PRAGMA hexkey="0x0102030405060708090A0B0C0D0E0F01"; 

Я пытаюсь открыть файл с помощью SQLCipher, создав массив символов ключа и преобразование в строку, чтобы использовать в качестве пароля следующим образом:

private static final char[] DB_KEY = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x01 }; 

String password = new String(DB_KEY); 

mDatabase = SQLiteDatabase.openOrCreateDatabase(dbPath, password, null); 

Это исключает, что база данных не является базой данных или не зашифрована.

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

Если это совместимо, что я делаю неправильно с расшифровкой?

+0

вы определяете 'DB_KEY', но затем использовать' MAP_KEY 'для' пароль'? –

+0

К сожалению, это была опечатка. Я исправил вопрос. – JWood

ответ

0

Формат, используемый вами, неверен для шестнадцатеричного шестнадцатеричного ключа. Чтобы использовать необработанный шестнадцатеричный ключ в SQLCipher, вы должны отформатировать свою строку так, чтобы она была префиксной с шестнадцатеричной последовательностью, а затем шестнадцатеричной строкой из 64 символов и заканчивалась одной цитатой. PRAGMA заявление может выглядеть следующим образом:

PRAGMA key = "x'2DD29CA851E7B56E4697B0E1F08507293D761A05CE4D1B628663F411A8086D99'"; 

В случае использования SQLCipher для Android, ваша строка может выглядеть следующим образом:

String key = "x\'2DD29CA851E7B56E4697B0E1F08507293D761A05CE4D1B628663F411A8086D99\'";