Sqlite 使用Windows Phone 8的SQLCipher无法加密设备上的纯文本数据库,然后对其进行查询

Sqlite 使用Windows Phone 8的SQLCipher无法加密设备上的纯文本数据库,然后对其进行查询,sqlite,windows-phone-8,sqlcipher,Sqlite,Windows Phone 8,Sqlcipher,目前是否有人使用SqlCipher在Windows Phone 8上执行此操作?我正在他们的GitHub板上与他们进行通信,但目前我还没有解决方案——下面是一个例子: public void Encrypt(string newpassword) { string encryptedDb = _dbConnection + "_"; File.Delete(encryptedDb); using (var db = new SQLiteConnection(_dbCo

目前是否有人使用SqlCipher在Windows Phone 8上执行此操作?我正在他们的GitHub板上与他们进行通信,但目前我还没有解决方案——下面是一个例子:

public void Encrypt(string newpassword) {
    string encryptedDb = _dbConnection + "_";

    File.Delete(encryptedDb);

    using (var db = new SQLiteConnection(_dbConnection, _dbPassword)) {
        //attachResult == 0
        int attachResult = db.Execute(string.Format("ATTACH DATABASE '{0}' AS encrypted KEY '{1}'", encryptedDb, newpassword));
        //exportResult == null
        string exportResult = db.ExecuteScalar<String>("select sqlcipher_export('encrypted')");
        //detachResult == 0
        int detachResult = db.Execute("DETACH DATABASE encrypted");
        db.Close();
    }

    //confirmed in storage 2 files db.s3db (unencrypted 25.0K) and db.s3db_(encrupted 27.0K)
    File.Copy(encryptedDb, _dbConnection, true);
    File.Delete(encryptedDb);

    //one remaining file db.s3db (encrypted with 'newpassword')

    using (var db = new SQLiteConnection(_dbConnection, newpassword)) {
        //throws "file is not a database or is encrypted"
        int records = db.ExecuteScalar<int>("select count(*) from sqlite_master;");
        db.Close();
    }
}
public void Encrypt(字符串newpassword){
字符串encryptedDb=_dbConnection+“u”;
文件。删除(encryptedDb);
使用(var db=new-SQLiteConnection(_-dbConnection,_-dbPassword)){
//attachResult==0
int attachResult=db.Execute(string.Format(“将数据库{0}作为加密密钥{1}'、encryptedDb、newpassword附加”);
//exportResult==null
字符串exportResult=db.ExecuteScalar(“选择sqlcipher\u export('encrypted')”);
//结果==0
int detachResult=db.Execute(“分离加密的数据库”);
db.Close();
}
//在存储2文件db.s3db(未加密25.0K)和db.s3db(加密27.0K)中确认
Copy(encryptedDb,_dbConnection,true);
文件。删除(encryptedDb);
//剩下的一个文件db.s3db(使用“newpassword”加密)
使用(var db=new-SQLiteConnection(_-dbConnection,newpassword)){
//抛出“文件不是数据库或已加密”
int records=db.ExecuteScalar(“从sqlite_master;中选择计数(*));
db.Close();
}
}
没有由此生成的文件,可能这是预期的,也没有引发异常:

        using (var db = new SQLiteConnection(_dbConnection, "")) {

            int attachResult = db.Execute("ATTACH DATABASE 'plaintext.db' AS plaintext KEY ''");

            string exportResult = db.ExecuteScalar<String>("SELECT sqlcipher_export('plaintext')");

            int detachResult = db.Execute("DETACH DATABASE plaintext");
            db.Close();
        }
使用(var db=new-SQLiteConnection(_-dbConnection,”)){
int attachResult=db.Execute(“将数据库'plaintext.db'附加为明文键“”);
string exportResult=db.ExecuteScalar(“选择sqlcipher_export('plaintext')”);
int detachResult=db.Execute(“分离数据库明文”);
db.Close();
}
这也会在指示点失效:

        using (var db = new SQLiteConnection(_dbConnection, "")) {
            //attachResult == 0
            int attachResult = db.Execute(string.Format("ATTACH DATABASE '{0}' AS encrypted KEY '{1}'", encryptedDb, "12345"));
            //exportResult == null
            string exportResult = db.ExecuteScalar<String>("select sqlcipher_export('encrypted')");
            //detachResult == 0
            int detachResult = db.Execute("DETACH DATABASE encrypted");
            db.Close();
        }

        using (var db = new SQLiteConnection(encryptedDb, "12345")) {
            //fails - 'Non db'
            int attachResult = db.Execute("ATTACH DATABASE 'plaintext.db' AS plaintext KEY ''");

            string exportResult = db.ExecuteScalar<String>("SELECT sqlcipher_export('plaintext')");

            int detachResult = db.Execute("DETACH DATABASE plaintext");
            db.Close();
        }
使用(var db=new-SQLiteConnection(_-dbConnection,”)){
//attachResult==0
int attachResult=db.Execute(string.Format(“将数据库“{0}”作为加密密钥“{1}”,encryptedDb,“12345”);
//exportResult==null
字符串exportResult=db.ExecuteScalar(“选择sqlcipher\u export('encrypted')”);
//结果==0
int detachResult=db.Execute(“分离加密的数据库”);
db.Close();
}
使用(var db=new-SQLiteConnection(encryptedDb,“12345”)){
//失败-“非db”
int attachResult=db.Execute(“将数据库'plaintext.db'附加为明文键“”);
string exportResult=db.ExecuteScalar(“选择sqlcipher_export('plaintext')”);
int detachResult=db.Execute(“分离数据库明文”);
db.Close();
}

此问题已解决,它与本地用户设置有关,而不是SQLCipher的问题。有关决议的详细信息,请参见