gpt4 book ai didi

javascript - 仅使用 WebCrypto API 使用密码加密私钥

转载 作者:行者123 更新时间:2023-11-29 10:05:53 25 4
gpt4 key购买 nike

是否可以使用字符串作为加密 key 并仅使用 WebCryptoAPI 来加密 CryptoKey(私钥)?我实现了一个功能,但出现以下错误:

Uncaught (in promise) DOMException: AES key data must be 128 or 256 bits

还有,我的函数。

function encryptPrivateKey() {
var promise = new Promise(function (resolve, reject) {
try {
var key = new TextEncoder().encode(pwd);
var iv = crypto.getRandomValues(new Uint8Array(12));
var alg = {name: 'AES-CTR', iv: iv};
window.crypto.subtle.importKey('raw', key, alg, false, ['encrypt']).then(function (key) {
window.crypto.subtle.encrypt(alg, key, privateKeyPEM).then(function (key) {
privateKey = key;
})
});
resolve(privateKey);
} catch (err) {
reject(Error(err));
}

});
return promise.then(function (result) {
return result;
}, function (err) {
console.log(err);
});
}

最佳答案

是的,首先请使用经过身份验证的加密方式,例如AES-GCM。

其次,您应该考虑为此任务使用现有格式,例如 PKCS#8。您可以查看 PKI.js 以获取可以帮助您执行此操作的库。

另一种方法是将 key 加密到 CMS 消息中,这是一个这样做的示例:https://pkijs.org/examples/CMSEnvelopedPreDefineDataExample.html

即使您想使用自定义格式,您也可以查看它以了解如何执行关联的 webcrypto。

第三,最好不要用密码加密,任何用密码加密的东西都是可磨的,最好生成一个可靠的对称 key 并使用它而不是派生密码。

如果您确实使用密码,请务必使用 PBDKF2 来扩展密码,https://github.com/diafygi/webcrypto-examples#pbkdf2 .如果您这样做,您的上述示例将最终正常工作。

如果您使用一种现有的 key 格式,它们会自然而然地让您沿着这条路走下去。

关于javascript - 仅使用 WebCrypto API 使用密码加密私钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43374172/

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