2

sqlcipherを使用してDBを作成し、パスワードキーの16進値を使用してアクセスしようとしています。github(https://github.com/sjlombardo/sqlcipher)の説明によると、キーはsha256アルゴリズムによってハッシュされ、DBの暗号化に使用されます。PRAGMAディレクティブを使用して、キーをプレーン形式と16進形式で提供する選択肢があります。プレーンバージョンを使用すると、すべて正しく機能しますが、六角レンチ値でDBにアクセスできません。たとえば、私の場合、キーは「デモ」であり、PRAGMA key='demo'すべての作品を使用する場合です。私はsha256を手に入れました:

echo-nデモ| shasum -a256 2a97516c354b68848cdbd8f54a226a0a55b21ed138e207ad6c5cbb9c00aa5aea

次に、sqlite3_exec呼び出しの指示に従って、PRAGMAディレクティブに提供します。

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

しかし、これは機能しません。

PRAGMAディレクティブに提供する必要があるキーの16進値は何ですか?

4

1 に答える 1

3

テキスト値と生の16進値を渡したときのプラグマキーの結果は互換性がありません。

  • PRAGMA key ='demo'を介してテキストキーを提供する場合、SQLCipherはPBKDF2を使用してキーデータを取得します(http://sqlcipher.net/designを参照)。これは、デフォルトでデータベースごとのランダムなソルトと4000回の反復を使用します。
  • 16進キーを指定すると、SQLCipherはバイナリ値をキーとして直接使用します。派生はありません。

したがって、実際の暗号化キーは、前述の2つのモード間でかなり異なります。どちらを使用するかわからない場合は、デフォルトで最初の方法を使用する必要があります。これは、鍵導出ステップにより、ブルートフォース攻撃や辞書攻撃に対する保護が強化されるためです。

これをより明確にするために、将来的にreadmeを更新する予定です。

于 2011-03-25T13:49:48.343 に答える