我需要加密两个设备的本地通信。我需要派生一个加密密钥来保护此类设备之间的通信。要导出加密密钥,双方必须:
此刻,我正在使用斯坦福Javascript加密库(sjcl),并且能够导出密钥。
const hmacSHA1 = function(key) {
const hasher = new sjcl.misc.hmac(key, sjcl.hash.sha1);
this.encrypt = function() {
return hasher.encrypt.apply(hasher, arguments);
};
};
const derivedKey = sjcl.misc.pbkdf2('password', passwordSalt, 100, 256, hmacSHA1);
const hexKey = sjcl.codec.hex.fromBits(derivedKey);
console.log(derivedKey, hexKey);
});
我期望派生的密钥材料包括80个字节:一个32字节的密码密钥,一个32字节的HMAC密钥和一个16字节的初始化向量(IV)。 IV与在加密时每条消息生成的随机随机数进行异或。
我如何确保获得了具有预期字节长度的预期资产?据我所知,sjcl已经应用了初始化向量IV。