【问题标题】:TypeError when encrypting data using the WebAPI window.crypto.subtle.encrypt()使用 WebAPI 加密数据时出现 TypeError window.crypto.subtle.encrypt()
【发布时间】:2017-02-17 16:09:19
【问题描述】:

当我尝试在 Firefox 上使用 Crypto API 时遇到了问题。 (doc) 当我尝试使用此函数加密明文时出现 TypeError:

window.crypto.subtle.encrypt(algo_enc,key,padded_clear_txt);

(doc)

这就是我定义参数的方式:

算法编码:

var iv = new Int32Array(4) ;//4-32 bit integers (128 bits)    
window.crypto.getRandomValues(iv); //defining the IV
var algo_enc = {"name": "AES-CBC", iv}

键:

var alg_key = {"name":"AES-CBC","length":128};   
var key = window.crypto.subtle.generateKey(alg_key,false,["encrypt","decrypt"]);

padded-clear-txt 是我要加密的 256 位 (2*128) 消息。

这是我执行加密功能时遇到的错误:

SubtleCrypto.encrypt 的参数 2 没有实现接口 CryptoKey。

密钥的生成很顺利,它是一个 CryptoKey 对象,但我仍然收到此错误。所以也许这是一个我应该报告的错误......

【问题讨论】:

    标签: javascript firefox encryption cryptography webcrypto-api


    【解决方案1】:

    WebCrypto 函数返回 Promise。它们不是同步的。结果在回调中接收。看到这个full example

    window.crypto.subtle.generateKey( { name: "AES-CBC", length: 128 }, false,  ["encrypt", "decrypt"] )
    .then(function(key){
        var iv  = window.crypto.getRandomValues(new Uint8Array(16))
        window.crypto.subtle.encrypt({ name: "AES-CBC",iv: iv,}, key, dataToEncrypt )
        .then(function(encrypted){
            //returns an ArrayBuffer containing the encrypted data
        }).catch(function(err){
           console.error(err);
        });     
    }).catch(function(err){
        console.error(err);
    });
    

    注意 webcrypto 使用 ArrayBuffer 进行输入和输出数据

    【讨论】:

      猜你喜欢
      • 2019-11-07
      • 1970-01-01
      • 2020-08-28
      • 2020-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-24
      相关资源
      最近更新 更多