首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在IE 11中使用SubtleCrypto

在IE 11中使用SubtleCrypto
EN

Stack Overflow用户
提问于 2017-09-22 08:11:37
回答 1查看 3.1K关注 0票数 4

我试图让SubtleCrypto与IE11一起工作。具体来说,我只是想简单地得到一些加密的东西,让我开始,我已经能够为AES-CBC生成一个密钥,但是当我尝试进行加密时,我会得到一个错误:“类型错配错误”。

我有一个JSFiddle:https://jsfiddle.net/tuwzsyyp/

代码语言:javascript
复制
        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应该满足它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-25 08:47:04

我找到了一个答案,here

结果显示,IE11返回一个事件,而不是直接返回结果。因此,我的示例代码变成:

代码语言:javascript
复制
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);
                    }
                };

这就是我们遵守规格的原因。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46359919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档