使用 WebAPI window.crypto.subtle.encrypt() 加密数据时出现 TypeError
TypeError when encrypting data using the WebAPI window.crypto.subtle.encrypt()
当我尝试在 firefox 上使用 Crypto API 时,我 运行 遇到了问题。 (doc)
当我尝试使用此函数加密明文时出现 TypeError :
window.crypto.subtle.encrypt(algo_enc,key,padded_clear_txt);
(doc)
这是我定义参数的方式:
algo_enc:
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) 消息。
这是我在执行加密功能时遇到的错误:
Argument 2 of SubtleCrypto.encrypt does not implement interface CryptoKey.
密钥的生成很顺利,是一个CryptoKey对象,但我仍然得到这个错误。所以也许这是一个我应该报告的错误...
WebCrypto 函数 return 承诺。它们不是同步的。结果在回调中接收。看到这个 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 作为输入和输出数据
当我尝试在 firefox 上使用 Crypto API 时,我 运行 遇到了问题。 (doc) 当我尝试使用此函数加密明文时出现 TypeError :
window.crypto.subtle.encrypt(algo_enc,key,padded_clear_txt);
(doc)
这是我定义参数的方式:
algo_enc:
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) 消息。
这是我在执行加密功能时遇到的错误:
Argument 2 of SubtleCrypto.encrypt does not implement interface CryptoKey.
密钥的生成很顺利,是一个CryptoKey对象,但我仍然得到这个错误。所以也许这是一个我应该报告的错误...
WebCrypto 函数 return 承诺。它们不是同步的。结果在回调中接收。看到这个 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 作为输入和输出数据