我尝试过在Android、iOS和JS上使用crypto_kdf_derive_from_key函数。在安卓和iOS上,它会产生相同的输出,但在JS上就不会了。上下文、主密钥和大小相同。你知道为什么吗?
所有平台都在底层使用相同的核心函数: crypto_kdf_derive_from_key
JS:
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:
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
}发布于 2019-08-22 07:58:36
不要转换上下文。假设它是一个字符串。
发布于 2019-08-22 04:22:37
Frank Denis建议不要转换上下文,即:
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;
}现在一切都正常了!
https://stackoverflow.com/questions/57589336
复制相似问题