gpt4 book ai didi

javascript - 让 crypto.subtle.encrypt 像 CryptoJS.AES.encrypt 一样工作

转载 作者:行者123 更新时间:2023-11-30 15:26:23 24 4
gpt4 key购买 nike

我编写了一个使用 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 源代码,但找不到我要找的东西。

subtle.crypt.encrypt 的工作方式是您必须显式传递 key 和 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 在您传入字符串时使用的参数。我该怎么做?

最佳答案

我创建了一个小型库来执行此操作。

嵌入 WebCrypto.js (缩小)在您的文档中。

像这样使用它:

// Initialize the library
initWebCrypto();

// Encrypt your stuff
WebCrypto.encrypt({
data: btoa("my message"),
password: "my password",
callback: function(response){
if( !response.error ){
console.log(response.result); // Compatible with CryptoJS
}else{
console.error(response.error);
}
}
});

参见 https://github.com/etienne-martin/WebCrypto.swift/blob/master/www/index.html更多示例。

源代码:https://github.com/etienne-martin/WebCrypto.swift/blob/master/source.js

希望这对您有所帮助!

关于javascript - 让 crypto.subtle.encrypt 像 CryptoJS.AES.encrypt 一样工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42915829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com