我已经从源代码构建了几个dll文件,它们主要来自相同的源码sqlite-3.6.22,OpenSSL 0.9.8和sqlcipher。
我之所以构建两个是因为我需要一个用于与C++项目一起使用,另一个作为Java的JDBC驱动程序(因此是Java JNI dll)。
现在我有了这两个DLL文件,我可以使用C++和C#(使用C版本)编写和创建数据库,并且可以使用Java完成相同的操作。这两个都按照我的预期响应,如果您提供正确的密码,您可以打开它们,如果您提供错误的密码,则会失败等等。理论上,这两个应该是sqlcipher的默认值,硬编码为aes-256-cbc。
然而,我无法使用其中一个打开由另一个创建的数据库。我可以在SQLite3管理工具中打开使用C版本创建的数据库,但只有在选择RSA密码时才能打开Java创建的那一个。
另外一件事是,如果我使用C数据库制作两个内容相同的数据库,则它们的每个字节都是相同的,而Java的则不同。
我确信我做错了一些明显的事情,但我真的看不到它 - 就我所知,Java的那个正常工作(由于某种原因更容易调试)。
我之所以构建两个是因为我需要一个用于与C++项目一起使用,另一个作为Java的JDBC驱动程序(因此是Java JNI dll)。
现在我有了这两个DLL文件,我可以使用C++和C#(使用C版本)编写和创建数据库,并且可以使用Java完成相同的操作。这两个都按照我的预期响应,如果您提供正确的密码,您可以打开它们,如果您提供错误的密码,则会失败等等。理论上,这两个应该是sqlcipher的默认值,硬编码为aes-256-cbc。
然而,我无法使用其中一个打开由另一个创建的数据库。我可以在SQLite3管理工具中打开使用C版本创建的数据库,但只有在选择RSA密码时才能打开Java创建的那一个。
另外一件事是,如果我使用C数据库制作两个内容相同的数据库,则它们的每个字节都是相同的,而Java的则不同。
我确信我做错了一些明显的事情,但我真的看不到它 - 就我所知,Java的那个正常工作(由于某种原因更容易调试)。