urb*_*urb 3 javascript encryption passwords aes webcrypto-api
是否可以使用字符串作为加密密钥并仅使用 WebCryptoAPI 来加密 CryptoKey(私钥)?我实现了一个函数,但出现以下错误:
Uncaught (in promise) DOMException: AES key data must be 128 or 256 bits
Run Code Online (Sandbox Code Playgroud)
还有,我的功能。
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);
});
}
Run Code Online (Sandbox Code Playgroud)
首先,请使用经过身份验证的加密模式,例如 AES-GCM。
其次,您应该考虑为此任务使用现有格式,例如 PKCS#8。您可以查看 PKI.js 以获取可以帮助您执行此操作的库。
另一种方法是将密钥加密到 CMS 消息中,这里有一个示例:https : //pkijs.org/examples/CMSEnvelopedPreDefineDataExample.html
即使您想做自定义格式,您也可以查看它以了解如何执行关联的 webcrypto。
第三,最好不要用密码加密,用密码加密的任何东西都是可研磨的,最好生成一个可靠的对称密钥并使用它而不是派生的密码。
如果您确实使用密码,请务必使用 PBDKF2 来扩展密码,https://github.com/diafygi/webcrypto-examples#pbkdf2。如果你这样做,你上面的样本最终会起作用。
如果您使用现有的密钥格式之一,它们会自然而然地将您发送到这条路径上。
| 归档时间: |
|
| 查看次数: |
1521 次 |
| 最近记录: |