标签: window.crypto

Internet Explorer 11中的crypto.getRandomValues有什么问题?

以下代码使用生成3个随机数window.crypto.getRandomValues.根据开发人员的文档(Microsoft MSDNMozilla MDN),这应该适用于IE和Chrome.

但实际上它仅适用于Chrome,而不适用于Internet Explorer 11.根据Microsoft的说法,此代码应该可以运行 - 它们提供了与下面列出的相似的代码示例(请参阅上面的MSDN链接).

怎么了?它是如何修复的,以便在两种浏览器中都能正常工作?

var randomValuesArray = new Int32Array(3);
var crypto = window.crypto;
crypto.getRandomValues(randomValuesArray);

var outputString = "";
for (var i = 0; i < randomValuesArray.length; i++) {
  if (i > 0) outputString += ",";
  outputString += randomValuesArray[i];
}
console.log(outputString);
Run Code Online (Sandbox Code Playgroud)

首先在Chrome中尝试使用此代码段,它会正确显示类似的内容

-513632982,-694446670,-254182938

在警报弹出窗口中.

然后,复制此问题的URL并在Internet Explorer 11中尝试- 它显示:

错误:{"message":"无法获取属性'getRandomValues'未定义或null>引用","filename":" https://stacksnippets.net/js ","lineno":15,"colno":2 }


一些背景:我想尝试使用这个代码在Javascript中生成Guids,然后我发现了这个问题.


(更新:根据 …

javascript internet-explorer window.crypto

10
推荐指数
1
解决办法
5577
查看次数

如何使用Crypto Web API获取HMAC

如何使用Crypto Web API(window.crypto)在浏览器中获取HMAC-SHA512(密钥,数据)?

目前我使用的是CryptoJS库,它非常简单:

CryptoJS.HmacSHA512("myawesomedata", "mysecretkey").toString();

结果是91c14b8d3bcd48be0488bfb8d96d52db6e5f07e5fc677ced2c12916dc87580961f422f9543c786eebfb5797bc3febf796b929efac5c83b4ec69228927f21a03a.

我想摆脱额外的依赖,并开始使用Crypto Web API.我怎样才能得到相同的结果?

javascript cryptography window.crypto

9
推荐指数
3
解决办法
1097
查看次数

window.crypto 返回 352 位密钥而不是 256 位密钥?

我正在尝试使用window.crypto以下方法加密一些文本:

await crypto.subtle.encrypt(algorithm, key, dataArrayBuffer).catch(error => console.error(error));
Run Code Online (Sandbox Code Playgroud)

但是我收到这个错误AES key data must be 128 or 256 bits。我正在使用 PBKDF2 从密码创建 256 位密钥,并指定密钥长度为256

window.crypto.subtle.deriveKey(
            {
                "name": "PBKDF2",
                "salt": salt,
                "iterations": iterations,
                "hash": hash
            },
            baseKey,
            {"name": "AES-GCM", "length": 256}, //<------------
            true, 
            ["encrypt", "decrypt"]
            );
Run Code Online (Sandbox Code Playgroud)

但我最终得到这个键edi5Fou4yCdSdx3DX3Org+L2XFAsVdomVgpVqUGjJ1g=后,我exportKey就和它转换来自ArrayBuffer于一个string与长度44字节,352位...

这可以解释错误,但是如何256window.crypto's创建一个实际的位键PBKDF2

JSFiddle:https ://jsfiddle.net/6Lyaoudc/1/

javascript encryption window.crypto

5
推荐指数
1
解决办法
191
查看次数

如何在IE11中使用TextEncoder?

我正在尝试哈希一个字符串.但IE11和Safari中的函数TextEncoder的替代方案是什么?

var string = "foobar";

window.crypto.subtle.digest(

    { "name": "SHA-256" },

    new TextEncoder("utf-8").encode(string)).then(function (hash)
    {
        console.log(hex(hash)); // 'c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2'
    }
);

var string = "foobar";

var buffer = new TextEncoder("utf-8").encode(string); // Uint8Array (ArrayBuffer)
var string = new TextDecoder("utf-8").decode(buffer); // string

console.log("buffer", buffer);
console.log("string '" + string + "'");
Run Code Online (Sandbox Code Playgroud)

hex是我从mozilla获得的一个函数

https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest

javascript buffer window.crypto

3
推荐指数
1
解决办法
4818
查看次数

使用 window.crypto.subtle API 从浏览器解密 RSA 消息

我正在尝试使用相应的私钥对使用公钥编码的 RSA 2048 位消息进行解码。环境是 google chrome,我正在使用window.crypto.subtleAPI。

我生成了密钥对并使用openssl工具对消息进行了编码:

# generate keys and put the private one in file private_key.pem
openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048

# extract public key in file public_key.pem
openssl rsa -pubout -in private_key.pem -out public_key.pem

# encode message input.txt using the public key
openssl rsautl -encrypt -oaep -inkey public_key.pem -pubin -in input.txt -out msg_rsa.enc

# convert the encoded msg in base 64 format
base64 msg_rsa.enc > msg_rsa_64.enc
Run Code Online (Sandbox Code Playgroud)

这是我用来解码消息的 JavaScript 代码:

function …
Run Code Online (Sandbox Code Playgroud)

javascript rsa encryption-asymmetric window.crypto

2
推荐指数
1
解决办法
1851
查看次数

如何使用Jest使用crypto或window.msCrypto测试功能

当使用Jest进行运行单元测试时,window.crypto API会引起问题。我还没有找到一种在不安装其他软件包的情况下将加密合并到Jest中的方法,这是我做不到的。因此,无需使用其他npm软件包,就可以测试使用的功能:crypto.getRandomValues()在其中不会崩溃的Jest?任何链接,建议或技巧,不胜感激

javascript reactjs jestjs window.crypto

1
推荐指数
8
解决办法
1161
查看次数