sqlcipher: не удалось получить доступ к БД с шестнадцатеричным ключом - PullRequest
2 голосов
/ 25 марта 2011

Я пытаюсь создать БД с помощью sqlcipher, а затем получить к ней доступ, используя шестнадцатеричное значение ключа пароля.Согласно описанию из github (https://github.com/sjlombardo/sqlcipher) ключ хешируется алгоритмом sha256, а затем используется для шифрования БД. Существует возможность предоставить ключ в простой и шестнадцатеричной форме через директиву PRAGMA. И если я использую простую версию, все работает правильно,но я не могу получить доступ к БД с шестнадцатеричным значением ключа. Например, в моем случае ключ 'demo', и когда я использую PRAGMA key='demo', все работает. Я получил sha256 с:

echo -n demo |shasum -a256 2a97516c354b68848cdbd8f54a226a0a55b21ed138e207ad6c5cbb9c00aa5aea

, а затем при условии его директивы ПРАГМА в соответствии с инструкциями в sqlite3_exec вызова:.

sqlite3_exec(db, "PRAGMA key = x'2a97516c354b68848cdbd8f54a226a0a55b21ed138e207ad6c5cbb9c00aa5aea'", NULL, NULL, NULL);

, но это не работает

1013 * Чтотакое шестнадцатеричное значение ключа, которое я должен предоставить директиве PRAGMA?

1 Ответ

3 голосов
/ 25 марта 2011

Результаты ключа прагмы при передаче текстового значения по сравнению с необработанным шестнадцатеричным значением не являются взаимозаменяемыми.

  • Если вы предоставляете текстовый ключ через PRAGMA key = 'demo', SQLCipher использует PBKDF2 для получения данных ключа (см. http://sqlcipher.net/design). При этом используется случайная соль для каждой базы данных и 4000 итераций по умолчанию.
  • Если вы предоставите шестнадцатеричный ключ, то SQLCipher использует двоичное значение в качестве ключа напрямую без деривации.

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

Я постараюсь обновить readme в будущем, чтобы прояснить ситуацию.

...