如何从密码和 PBKDF2 迭代中获取原始密钥数据

How to get raw key data from passphrase and PBKDF2 iterations

SQLCipher 中,可以通过两种方式提供数据库密钥:作为密码(具有相关的 PBKDF2 轮数)或作为原始密钥。

我正在尝试找到一种方法,在给定密码短语(任意字符串)和轮数的情况下获取原始密钥(以 64 个字符的十六进制字符串形式给出)。我假设解决方案在于我自己以某种方式执行 PBKDF2 密钥派生,但我不太熟悉这可能如何工作,或者它是否会产生一个我可以作为原始密钥提供给 PRAGMA KEY 的值。此外,PBKDF2 函数似乎需要加盐,我不知道。如果必须的话,我相信我可以深入研究 sqlcipher 源代码来解决这个问题,但我希望可能已经有一种我所缺少的简单方法来做到这一点。

可以找到有关 SQLCipher 密钥派生的详细信息 on the design page。 salt 存储在数据库文件的前 16 个字节中。然后,您将使用盐和密码以及适当数量的 PBKDF2-HMAC-SHA1 回合(SQLCipher 3 为 64,000,早期版本为 4,000)