我试图让SubtleCrypto与IE 11合作。具体来说,我只是想简单地加密一些东西,让我开始,并且我已经能够生成一个密钥AES-CBC,但当我尝试加密时,我收到一个错误:"输入错误错误"。
我有一个JSFiddle:https://jsfiddle.net/tuwzsyyp/
try {
//Asynchronous crypto
window.msCrypto.subtle.generateKey(
{ name: 'AES-CBC', length: 256 },
false,
['encrypt']
)
.oncomplete = function (key) {
try {
window.msCrypto.subtle.encrypt(
{
name: "AES-CBC",
iv: initialisationVector
},
key, //from generateKey or importKey above
new Uint16Array(currentArrayBuffer) //ArrayBuffer of data you want to encrypt
).oncomplete = function (encrypted) {
alert(3 + "; " + new Uint16Array(encrypted));
};
} catch (err) {
alert(err);
}
};
} catch (err) {
alert(err);
}
我认为输入数据最有可能是错误类型,但Microsoft文档并不清楚。它说它需要是一个ArrayBufferView,但据我所知,Uint16Array应该满足它。
答案 0 :(得分:3)
我找到了答案here。
事实证明,IE 11返回一个事件而不是直接返回结果。因此,我的示例代码变为:
window.msCrypto.subtle.generateKey(
{ name: 'AES-CBC', length: 256 },
false,
['encrypt']
)
.oncomplete = function (e) {
var key = e.target.result;
try {
window.msCrypto.subtle.encrypt(
{
name: "AES-CBC",
iv: initialisationVector
},
key, //from generateKey or importKey above
new Uint16Array(currentArrayBuffer) //ArrayBuffer of data you want to encrypt
).oncomplete = function (e) {
var encrypted = e.target.result;
alert(3 + "; " + ab2str(encrypted));
};
} catch (err) {
alert(err);
}
};
这就是我们遵守规范的原因。