我正在尝试使用sqlcipher创建数据库,然后使用密码密钥的十六进制值来访问它。
根据github(https://github.com/sjlombardo/sqlcipher)的描述,密钥由sha256算法进行哈希处理,然后用于密码数据库。可以通过PRAGMA指令以普通和十六进制形式提供密钥。如果我使用普通版本它都可以正常工作,但我无法访问具有十六进制键值的数据库。
例如,在我的情况下,密钥是'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指令提供什么是密钥的十六进制值?
答案 0 :(得分:3)
传递文本值与原始十六进制值时,pragma键的结果不可互换。
因此,实际加密密钥在您提到的两种模式之间会有很大差异。如果您不确定使用哪种方法,则应该默认使用第一种方法,因为密钥派生步骤可以提供更高级别的保护,防止暴力破解和字典攻击。
我将在未来尝试更新自述文件,以便更清楚。