2013-12-23 59 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\'";