gpt4 book ai didi

iphone - sqlcipher:无法访问提供十六进制 key 的数据库

转载 作者:行者123 更新时间:2023-12-03 20:55:26 26 4
gpt4 key购买 nike

我正在尝试使用 sqlcipher 创建数据库,然后使用密码 key 的十六进制值访问它。根据github(https://github.com/sjlombardo/sqlcipher)的描述, key 通过sha256算法进行哈希处理,然后用于加密数据库。可以选择通过 PRAGMA 指令以纯格式和十六进制形式提供 key 。如果我使用普通版本,一切正常,但我无法使用十六进制键值访问数据库。例如,在我的例子中,键是“demo”,当我使用 PRAGMA key='demo' 时,一切正常。我得到了 sha256:

echo -n demo | shasum -a256 2a97516c354b68848cdbd8f54a226a0a55b21ed138e207ad6c5cbb9c00aa5aea

然后根据 sqlite3_exec 调用中的说明将其提供给 PRAGMA 指令:

sqlite3_exec(db, "PRAGMA key = x'2a97516c354b68848cdbd8f54a226a0a55b21ed138e207ad6c5cbb9c00aa5aea'", NULL, NULL, NULL);

但这不起作用。

我应该向 PRAGMA 指令提供 key 的十六进制值是多少?

最佳答案

传递文本值与原始十六进制值时的 pragma key 结果不可互换。

  • 如果您通过 PRAGMA key='demo' 提供文本 key ,SQLCipher 将使用 PBKDF2 导出 key 数据(请参阅 http://sqlcipher.net/design )。默认情况下,这使用随机的每个数据库盐和 4000 次迭代。
  • 如果您提供十六进制 key ,则 SQLCipher 会直接使用二进制值作为 key ,无需派生。

因此,您提到的两种模式之间的实际加密 key 将有很大不同。如果您不确定使用哪种方法,您可能应该默认使用第一种方法,因为 key 派生步骤提供了针对暴力破解和字典攻击的更高级别的保护。

我将来会尝试更新自述文件以使这一点更加清晰。

关于iphone - sqlcipher:无法访问提供十六进制 key 的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5430169/

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