首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Libsodium函数产生不同的输出

Libsodium函数产生不同的输出
EN

Stack Overflow用户
提问于 2019-08-21 18:13:38
回答 2查看 93关注 0票数 1

我尝试过在Android、iOS和JS上使用crypto_kdf_derive_from_key函数。在安卓和iOS上,它会产生相同的输出,但在JS上就不会了。上下文、主密钥和大小相同。你知道为什么吗?

所有平台都在底层使用相同的核心函数: crypto_kdf_derive_from_key

JS:

代码语言:javascript
复制
generateKey(basedOnKey: string): Uint8Array {
    const masterKey = this.convertHexToBytes(basedOnKey);
    const context = this.textEncoder.encode('AAAAAAAA');
    const newKey = sodium.crypto_kdf_derive_from_key(sodium.crypto_secretbox_KEYBYTES, 0, context, masterKey);

    return newKey;
}

iOS:

代码语言:javascript
复制
public func getNewSecretKey(basedOn key: String) -> Data? {
    let masterKey = key.hexDecodedData().bytes
    let context = "AAAAAAAA"
    let newKey = sodium.keyDerivation.derive(secretKey: masterKey, index: 0, length: 32, context: context)

    return newKey?.data
}
EN

回答 2

Stack Overflow用户

发布于 2019-08-22 07:58:36

不要转换上下文。假设它是一个字符串。

票数 1
EN

Stack Overflow用户

发布于 2019-08-22 04:22:37

Frank Denis建议不要转换上下文,即:

代码语言:javascript
复制
generateKey(basedOnKey: string): Uint8Array {
    const masterKey = this.convertHexToBytes(basedOnKey);
    const context = 'AAAAAAAA';
    const newKey = sodium.crypto_kdf_derive_from_key(sodium.crypto_secretbox_KEYBYTES, 0, context, masterKey);

    return newKey;
}

现在一切都正常了!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57589336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档