我编写了一个使用 CryptoJS 实现的系统。
编写代码后,我发现crypto.subtle.encrypt
这是浏览器内置的 AES 实现。
我想将我的代码从使用 CryptoJs 改为使用 crypto.subtle.encrypt。
以旧方式(CryptoJS)编码的数据必须与新方式(crypto.subtle.encrypt)兼容。
我怎样才能做到这一点?
当我写我的原始代码时,它看起来很像这样:
function cryptojs_encrypt(message) {
var key = "my password";
return CryptoJS.AES.encrypt(message, key).toString());
}
传入的“key”只是一个字符串。根据我从其他 stackoverflow 问题中了解到的内容,CryptoJS 将此字符串转换为“key”和“iv”。这究竟是如何实现的?我尝试浏览 CryptoJS 源代码,但找不到我要找的东西。
微妙.crypt.encrypt 的工作方式是您必须明确地传递密钥和 iv。这是我的代码:
function subtle_encrypt(message) {
var msg = new TextEncoder().encode(message);
var pass = new TextEncoder().encode('my password');
var alg = { name: 'AES-CBC', iv: pass };
crypto.subtle.importKey('raw', pass, alg, false, ['encrypt']).then(function(key){
crypto.subtle.encrypt(alg, key, msg).then(function(ctBuffer){
var string = btoa(ctBuffer);
console.log("result", string);
});
});
}
这有效,但返回不同的结果。我需要修改alg
传入字符串时与 CryptoJS 使用的参数相匹配的参数。我该怎么做呢?