2013-02-16 95 views
0

我想在Windows Phone上使用csharp-sqlite使用SQLite。我有一个现有的加密数据库,需要传入密码,但传递字符串时不起作用。我发现this thread,但它说我需要传递一个32字节的十六进制密钥,但我如何将现有的字符串转换为34字节的十六进制密钥?编码字符串为34字节十六进制SQLite密码

感谢

至于问意见,这里是目前的代码,如果数据库未加密的正常工作与数据库和我删除了“密码”的一部分。一旦它被加密,就会出现一个错误(比如表X不存在,即使它在没有加密的情况下也是如此),我想我已经将它调试到了库我使用似乎无法接受字符串密码,并需要一个十六进制密钥。

using (var conn = new SqliteConnection("data source=file:db.db3,Password=mypwd")) 
{ 
} 

我试过连接字符串的各种组合,包括添加版本= 3和使用分号而不是逗号。

+1

SQLite不接受密码,所以推测你的意思是SqlCipher。如果你给SqlCipher一个不是32个十六进制字节的密码,它将把它分散到适当的32字节密钥中。 – 2013-02-16 04:56:14

+0

谢谢,这似乎是正确的,但我如何使用SqlCipher?我创建了它的一个新实例,但不知道我输入现有字符串的位置。 – NewCode 2013-02-16 05:07:25

+0

发布你的当前代码? – 2013-02-16 08:02:16

回答

0

我没有用过SqlCipher但sample code on their website不使用集成到连接字符串密码,但事后在连接上设置:

conn.ConnectionString = "Data Source=sqlcipher.db;Pooling=false;"; 
((SQLiteConnection)conn).SetPassword("secret"); 
conn.Open(); 

如果通过连接字符串指定的密码是可能的,你可能需要尝试使用分号而不是逗号来分隔值。

+0

* SQLite没有内置加密*除了开源的SqlCipher之外,还有一个专有的[SQLite Encryption Extension](http://www.hwaci.com/sw/sqlite/see.html) ),我想这可能是你正在使用的。 – 2013-02-16 18:20:26

+0

对不起,我已经将PC上的System.Data.SQLite库用作包装。我无法改变它,因为这是我一直要求在PC版上使用的。我使用这里显示的方法加密http://sqlite.phxsoftware.com/forums/t/130.aspx – NewCode 2013-02-16 18:50:21

+0

@NewCode抱歉,我最初并不明白。链接中的示例也使用分号来分割ConnectionString部分。 – 2013-02-16 19:38:33

相关问题