[英]What padding does window.crypto.subtle.encrypt use for AES-CBC
[英]window.crypto.subtle.encrypt returns undefined
我正在嘗試使用Web Crypto API加密文本。 以下是我的代碼:
const generatedIv = generateIv();
let generatedKey;
generateKey()
.then(key => {
generatedKey = key;
encryptData(encodeText(JSON.stringify(data)), generatedKey, generatedIv);
}).then(encrypted => {
console.log(encrypted) // Always returns undefined?
}).catch(
err => console.error(err)
);
function encodeText(data) {
if ('TextEncoder' in window) {
return new TextEncoder('utf-8').encode(data);
}
return undefined;
}
function generateIv() {
return window.crypto.getRandomValues(new Uint8Array(12));
}
function generateKey() {
return window.crypto.subtle.generateKey({
name: 'AES-GCM',
length: 256
}, true, [
'encrypt',
'decrypt'
]);
}
function encryptData(data, key, iv) {
return window.crypto.subtle.encrypt({
name: 'AES-GCM',
iv: iv,
tagLength: 128
}, key, data);
}
由於某些原因, console.log
語句總是打印出undefined
。 我嘗試在網上尋找可能的解決方案,但找不到任何解決方案。
我在這里做錯什么了嗎? 提前致謝! :)
const generatedIv = generateIv(); let generatedKey; generateKey() .then(key => { generatedKey = key; // you need to return something if you want the next .then to get anything return encryptData(encodeText("Hello World"), generatedKey, generatedIv); }).then(encrypted => { console.log("encrypted is an ArrayBuffer:", encrypted instanceof ArrayBuffer) }).catch( err => console.error(err) ); function encodeText(data) { if ('TextEncoder' in window) { return new TextEncoder('utf-8').encode(data); } return undefined; } function generateIv() { return window.crypto.getRandomValues(new Uint8Array(12)); } function generateKey() { return window.crypto.subtle.generateKey({ name: 'AES-GCM', length: 256 }, true, [ 'encrypt', 'decrypt' ]); } function encryptData(data, key, iv) { return window.crypto.subtle.encrypt({ name: 'AES-GCM', iv: iv, tagLength: 128 }, key, data); }
運行上面的代碼,您應該看到encrypted is an ArrayBuffer: true
因為這就是您期望的加密結果,所以是一個ArrayBuffer ...因此,huzzah-一個簡單的return
就是返回值(在在這種情況下, window.crypto.subtle.encrypt
)將promise返回到下一個.then
,否則稱為promise鏈接
祝你有美好的一天
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.