sqlcipher:无法访问提供十六进制密钥的数据库
我正在尝试使用 sqlcipher 创建数据库,然后使用密码密钥的十六进制值访问它。 根据github(https://github.com/sjlombardo/sqlcipher)的描述,密钥通过sha256算法进行哈希处理,然后用于加密数据库。可以选择通过 PRAGMA 指令以纯格式和十六进制形式提供密钥。如果我使用普通版本,一切正常,但我无法使用十六进制键值访问数据库。 例如,在我的例子中,键是“demo”,当我使用 PRAGMA key='demo'
时,一切正常。 我得到了 sha256:
echo -n 演示 |沙苏姆-a256 2a97516c354b68848cdbd8f54a226a0a55b21ed138e207ad6c5cbb9c00aa5aea
,然后根据 sqlite3_exec 调用中的说明将其提供给 PRAGMA 指令:
sqlite3_exec(db, "PRAGMA key = x'2a97516c354b68848cdbd8f54a226a0a55b21ed138e207ad6c5cbb9c00aa5aea'", NULL, NULL, NULL);
但这不起作用。
我应该向 PRAGMA 指令提供密钥的十六进制值是多少?
I'm trying to create DB using sqlcipher and then access it by using hex value of password key.
According to description from github (https://github.com/sjlombardo/sqlcipher) key is hashed by sha256 algorithm and then used to cipher DB. There is a choice to provide the key in plain and hex form through PRAGMA directive. And if I use plain version it all works correctly, but I unable to access DB with hex key value.
For example in my case key is 'demo' and when I use PRAGMA key='demo'
all works.
I got sha256 with:
echo -n demo | shasum -a256
2a97516c354b68848cdbd8f54a226a0a55b21ed138e207ad6c5cbb9c00aa5aea
and then provided it to PRAGMA directive according to instructions in sqlite3_exec call:
sqlite3_exec(db, "PRAGMA key = x'2a97516c354b68848cdbd8f54a226a0a55b21ed138e207ad6c5cbb9c00aa5aea'", NULL, NULL, NULL);
but this doesn't work.
What is the hex value of key should I provide to PRAGMA directive?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
传递文本值与原始十六进制值时的 pragma key 结果不可互换。
因此,您提到的两种模式之间的实际加密密钥将有很大不同。如果您不确定使用哪种方法,您可能应该默认使用第一种方法,因为密钥派生步骤提供了针对暴力破解和字典攻击的更高级别的保护。
我将来会尝试更新自述文件以使这一点更加清晰。
The results of pragma key when passed a text value vs a raw hex value are not interchangeable.
Thus, the actual encryption key will be quite different beween the two modes you mentioned. If you are not sure which to use, you should probably default to using the first method, as the key derivation step provides a greater level of protection against brute force and dictionary attacks.
I'll try to update the readme in the future to make this more clear.