这是事情: 在我的Qt4.6-Project中,我使用了一个SQLite数据库。这个数据库不应该在我的硬盘上解密。所以我想,在我的程序每次开始时,用户都会被要求输入一个密码来解密数据库。当然,数据库永远不应该在我的硬盘上出现“清晰”(未加密)。
那么有没有可能“即时”解密SQLite数据库并读取和写入数据?什么算法在这里最好(也许是AES)?
当它不可能(或非常慢)时,最好是加密数据库中的每个字符串,并在密码正确时解密字符串(以便用户可以打开数据库,但不知道所有的可能意思)?加密/解密SQLite数据库并“动态地”使用它
9
A
回答
11
没有内置的支持,据说你有选择。
1)你可以自己加密/解密所有的字符串,但这是很多工作,不透明,并且不允许你在数据库中进行搜索等操作。
2)SQLiteCrypt and SQLCipher做你要找的东西。
你可以使用它们几乎是完全透明的,通常他们被认为只有5%的开销比没有加密。
2
我能想到的最佳方式是使用FUSE - “用户空间中的文件系统” - 可用于Linux,Mac OS X和其他系统,或不同的加密文件系统。这将使SQLite在磁盘上进行物理加密时将其视为未加密。通过使用权限,您可以确保人们无法访问未加密的文件系统。
我不确定SQLite是否有办法覆盖低级读/写例程,这将允许您在没有文件系统游戏的情况下即时实现加密。至少我从来不需要那样做。如果不在SQLite问题跟踪器中,您可能希望搜索这样的功能请求并将其归档。
4
我会建议使用一个库来为你做这件事,而不是建立在你自己的加密。
http://www.hwaci.com/sw/sqlite/see.html 或 http://sqlite-crypt.com/documentation.htm
使用你喜欢的搜索引擎的一些替代品。
1
另一个选项是Botan 1.9.x(src/wrap/sqlite)附带的SQLite加密编解码器。
该选项使您能够在编译时自定义加密类型,包括密码和模式。
披露:我向Botan提供了编码解码器。
相关问题
- 1. 使用java加密/解密sqlite数据库
- 2. 是否可以使用Javascript来加密/解密SQLite数据库?
- 3. 如何将加密的SQLite数据库解密到内存中并访问它?
- 4. SQLite数据库解密使用AES
- 5. 加密 - 解密,数据库
- 6. 如何加密/解密SQLite数据库中的数据?
- 7. 加密SQLite数据库中的密码?
- 8. SQLite数据库加密C#?
- 9. SQLite数据库加密
- 10. 数据库加密和数据库解密使用C#代码
- 11. 加密/解密数据到数据库
- 12. 在Sqlite数据库中加密和解密?
- 13. 无法在.NET4中加密/解密SQLite数据库
- 14. 加密和解密Sqlite文件(使用核心数据)
- 15. 使用Objective-C加密数据并使用Java解密它问题
- 16. 使用CryptoJS加密数据并使用AESCipherService解密
- 17. sqlite加密/解密+ sqlcipher + iPhone
- 18. 数据库加密 - Javascript解密
- 19. 解密使用FormsAuthentication.Encrypt加密的数据
- 20. 使用解密密钥解密数据
- 21. 用密钥加密和解密数据
- 22. 数据库加密:MSSQL 2008+数据库加密并在Coldfusion中使用
- 23. 如何使用数据库主密钥(DMK)加密/解密数据?
- 24. 加密密码并将它们保存到数据库
- 25. 使用密码保护SQLite数据库
- 26. 加密/解密数据流?
- 27. php解密加密数据
- 28. 使用JS加密数据并以表格解密PHP
- 29. 在Android中加密数据并使用AESCrypt在Ruby中解密
- 30. 我可以用密码加密SQLite数据库吗?
但是当我使用不同的API时,我没有Qt和SQLite的“可用性”了,对吗? – Berschi 2010-04-03 15:27:46
@Berschi:你可能不得不重建Qt中的sqlite组件,但它们提供了像这样的需求的来源。我认为尝试使用这些组件中的一个将是您最好的选择。 – 2010-04-03 15:30:12
您应该能够使用sqllite驱动程序并针对由SqlLitCrypt或SQLCipher提供的sqllite进行编译。您可能可以在连接字符串中嵌入一些密码功能,或者扩展驱动程序类并直接调用驱动程序以获取扩展功能 – 2010-04-07 01:20:16