You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Qt实现与Crypto-js一致的PBKDF2派生密钥?

Qt与Crypto-js PBKDF2输出不一致的解决方法

问题根源

  1. 参数单位差异:Crypto-js的keySize是32位字长,不是字节。你设置的keySize:8实际派生的是8×4=32字节的密钥,所以输出是64位十六进制字符串(32字节转十六进制),而非你预期的8字节。
  2. 输出格式差异:Crypto-js的toString()默认输出十六进制,而你的Qt代码用了toBase64(),格式不匹配。

修正后的Qt代码

要生成和Crypto-js完全一致的结果,需要调整派生长度为32字节,并将输出转为小写十六进制:

auto iterations = 10000;
auto keyLen = 32; // 对应Crypto-js的keySize:8(每个keySize单位是4字节)
auto res = QPasswordDigestor::deriveKeyPbkdf2(
    QCryptographicHash::Sha1,
    QString("water").toUtf8(),
    QString("saltsaltsalt").toUtf8(),
    iterations,
    keyLen
);  
// 转为小写十六进制字符串,和Crypto-js输出格式对齐
auto result = res.toHex().toLower();

验证结果

运行代码后,result的值将和Crypto-js示例输出完全一致:

04b72ee92a8850bfdbe7cf801348a6701d11931702dcecad52f0b3351bedd01c

内容的提问来源于stack exchange,提问作者Tiago Stein

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 18:18:22