簡體   English   中英

window.crypto.subtle.encrypt返回未定義

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM