2013-12-23 57 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中使用原始十六進制密鑰,您必須格式化字符串,使其前綴爲x,後跟單引號,然後是64個字符的十六進制字符串,並以單引號結尾。一個PRAGMA語句可能是這個樣子:

PRAGMA key = "x'2DD29CA851E7B56E4697B0E1F08507293D761A05CE4D1B628663F411A8086D99'"; 

在使用SQLCipher爲Android的情況下,你的字符串可能是這個樣子:

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