gpt4 book ai didi

java - 嵌入式数据库和加密

转载 作者:搜寻专家 更新时间:2023-10-30 22:32:21 26 4
gpt4 key购买 nike

我想创建一个开源应用程序,其中用户特定的数据存储在嵌入式数据库(例如 SQLite、H2、HSQLDB)中。此外,还有一个登录屏幕,用户必须在其中输入加密数据库的密码。但我还不确定如何处理加密:仅由数据库和/或例如处理。具有整个文件加密功能的 BouncyCaSTLe?

我更喜欢基于文件的加密:如果我使用文件加密,是否可以在不将解密文件物理存储在硬盘上的情况下使用嵌入式数据库?这个要求有意义吗?我的意思是,如果我的计算机被攻击者破坏,存储在数据库中的数据在某种程度上是可读的,对吧?另一方面,如果不需要创建数据库的解密副本就好了(考虑硬盘空间或性能)。

非常感谢您的帮助! :)

最佳答案

好的,我现在通过以下过程解决了我的问题:

我现在使用 HSQLDB 及其使用 AES-128(以及 Blowfish 等其他算法)的内置加密。当一个打开的连接存在时,HSQLDB 创建不同的文件。

如果使用HSQLDB的加密机制,文件是用生成的私钥加密的。生成在每次运行时创建一个单独的 32 个字符宽的 key 。

为了保护这个 key 和其他文件,我首先将整个文件夹和数据库文件打包成一个 zip 文件。在下一步中,我使用用户在登录屏幕上输入的密码加密此文件。这个密码不会被物理保存。对于加密/解密,我使用了 Bouncy CaSTLe Java 密码学 API 的 AES 实现。

加密细节:1. 创建随机初始化 vector (IV;16 字节)、带有 SecureRandom 类的盐(8 字节)和数据加密 key (DEK;16 字节)和用于 AES 的 key 生成器。2. 使用输入的密码和盐创建 32 字节长的 PBKDF2-Key,并将其拆分为验证 key (VK;16 字节)和 key 加密 key (KEK;16 字节)。3. 将包含数据库文件的文件夹打包成一个 zip 文件,并使用 DEK 和 AES-Provider 对该文件的字节进行加密。4. 通过 AES 提供程序使用 KEK 和 IV 对 DEK 进行加密。5. 在加密的 zip 文件的开头存储 IV、Salt、DEK 和 VK。如果您另外使用数据库内部加密,您会得到一个 CRYPT_KEY,它也存储在 zip 文件中。

最后,我在每次关闭应用程序时删除数据库文件。

如果您有任何建议可以降低此过程的脆弱性,请毫不犹豫地写下来。我将非常高兴获得有关如何改进所描述过程的安全方面的想法!

关于java - 嵌入式数据库和加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41910956/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com