问题标签 [webcrypto-api]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1390 浏览

javascript - 使用 js 加密框架或浏览器的 Web Crypto API?

我想在浏览器中使用加密算法。我看到有两种方法可以做到这一点。首先,使用可用的 javascript 加密框架,如 cryptojs、sjcl 等或浏览器内置的 Web Crypto API。我很困惑哪个更好。谁能帮我解决这个问题?

谢谢

0 投票
3 回答
5076 浏览

node.js - Node.js 和 WebCrypto 之间的 ECDSA 签名似乎不兼容?

我正在使用以下示例在 Node.js 中进行签名和验证:https ://github.com/nodejs/node-v0.x-archive/issues/6904 。验证在 Node.js 中成功,但在 WebCrypto 中失败。同样,使用 WebCrypto 签名的消息无法在 Node.js 中验证。

这是我用来验证使用 WebCrypto 从 Node.js 脚本生成的签名的代码 - https://jsfiddle.net/aj49e8sj/。在 Chrome 54.0.2840.27 和 Firefox 48.0.2 中测试

与使用 SHA-256 而不是 SHA-1 的类似问题相关的问题:使用 Node.js/crypto 生成 ECDSA 签名

我检查过的事情:

  • 我解码了 Node.js 密钥并验证它们与通过 WebCrypto 生成的密钥具有相同的 OID。这告诉我我正在使用正确的曲线。
  • SHA-1 被明确标识为在两个位置使用的哈希。
  • ECDSA 在 Node.js 和 WebCrypto 中都有明确标识。

如何成功验证从 Node.js 收到的签名,反之亦然 - 验证从 WebCrypto 生成的 Node.js 中的签名?或者标准的实现是否存在细微的差异,导致它们不兼容?

编辑:

  • WebCrypto 签名(64 字节):uTaUWTfF+AjN3aPj0b5Z2d1HybUEpV/phv/P9RtfKaGXtcYnbgfO43IRg46rznG3/WnWwJ2sV6mPOEnEPR0vWw==
  • Node.js 签名(71 字节):MEUCIQDkAtiomagyHFi7dNfxMrzx/U0Gk/ZhmwCqaL3TimvlswIgPgeDqgZNqfR5/FZZASYSczUAhGSXjuycLhWnvk20qKc=

已验证的 Node.js 签名是 DER 编码的,而 WebCrypto 签名不是。

0 投票
0 回答
246 浏览

digital-signature - 网页如何使用令牌证书?

我想使用来自浏览器的令牌证书来签署数据。当您插入令牌时,证书可以在 Windows 证书存储中访问,但我无法从浏览器访问证书。

我查看了Web Crypto API,但没有这方面的功能。有没有办法做到这一点?

谢谢

0 投票
3 回答
3612 浏览

javascript - 将 webcrypto 密钥导出为 PEM 格式

我正在使用带有 RSASSA-PKCS1-v1_5 ( https://github.com/diafygi/webcrypto-examples#rsassa-pkcs1-v1_5---sign ) 的 WebCrypto,我需要使用 javascript 代码将公钥导出为 PEM 格式。

文档说可以通过这种方式导出密钥: https ://github.com/diafygi/webcrypto-examples#rsassa-pkcs1-v1_5---exportkey 但我需要不同的格式。

任何想法?

提前致谢。

问候

0 投票
1 回答
1939 浏览

angularjs - Angular JS 密码学。pbkdf2 和迭代

我想使用 sha512 和迭代计数将我的字符串转换为 PBKDF2。我在nodejs中使用“pbkdf2”模块。我怎样才能在 Angular JS 中实现同样的效果。

0 投票
1 回答
692 浏览

javascript - 我可以在 NodeJS、CSharp 和 WebCrypto 之间使用 DH/ECDH 方法吗?

我正在浏览器扩展、NodeJS 应用程序(服务器)和 C# 应用程序之间建立通信线路。我需要使用 Diffie-Hellman 或 ECDH 之类的方法在每个实例之间交换密钥,以便开始加密敏感数据。

通讯线路如下:

浏览器<-->节点<--> CSharp

浏览器只需要与 Node 通信,CSharp 应用程序也只需要与 Node 通信

我需要找到一种方法来执行某种密钥交换,例如 ECDH,它适用于大多数浏览器(可以是浏览器化的 Node 代码),并且在 NodeJS 端具有兼容的实现。我需要找到另一种方法在 NodeJS 和 C# 之间做同样的事情。

我可以看到 C# 中有很多使用 ECDH 的示例(例如:https ://blogs.msdn.microsoft.com/shawnfa/2007/01/22/elliptic-curve-diffie-hellman/ ),但我可以没有看到像 Node.js 那样提到 ECDH 曲线。这些平台之间是否有一些通用的方式来执行密钥交换?

0 投票
1 回答
2043 浏览

javascript - Java 签名/验证密钥和 Javascript WebCrypto 验证失败

我试着

  1. 生成签名/验证密钥 (RSA)
  2. 在 Java Web 应用程序上签署一个值(使用这些键)(让我们调用服务器端)
  3. RSASSA-PKCS1-v1_5为了让 Web 客户端验证 - 导入为+的公钥SHA-256,(在浏览器中,使用WebCrypto API / 客户端)

我在验证签名值(在 Java 服务器端签名)时遇到问题,即使公共签名/验证密钥已成功导入为客户端的 JWK。

我想知道在我可能遇到的任何步骤(OpenSSL、Java 或 Javascript)中是否存在任何算法兼容性问题。

用于生成密钥的 OpenSSL 命令

使用 Java 导入密钥(服务器端)

使用 Java 对值进行签名(服务器端)

将它们发送到 WebCrypto API 的 Web 应用程序,以作为客户端/浏览器进行验证(客户端知道第一步中生成的 publicKey)。

注(1):在 Java 端,我使用com.nimbusds.jose.jwk.JWK将 publicKey 导出为 JWK 格式。

WebCrypto 已成功导入签名密钥。但是当涉及到验证时,它会失败(验证布尔值为false)。

注意(2):还请注意,我在 WebCrypto 上找到的每个示例都用于Uint8Array表示字节数组,但由于 Java 生成有符号字节数组,我需要使用Int8Array它以防止签名值受到污染(也许这也是一个问题)。

编辑:作为参考,它原来是另一个不相关的问题 - 我在 JavaScript 中两次转换来自 base64 的预期数据而没有注意到它;自然验证失败。

0 投票
3 回答
6634 浏览

javascript - 如何使用 Web Crypto API 解密使用 OpenSSL 创建的文件?

我正在尝试解密使用 OpenSSL 命令行界面创建的文件。该文件是使用以下内容创建的:

openssl aes-256-cbc -a -in file.txt -out file_encrypted.txt

并且可以通过以下方式解密:

openssl aes-256-cbc -d -a -in file_encrypted.txt

通过使用该-p标志,我可以检索 WebCrypto API 所需的实际值、盐和 IV:

我目前的尝试如下所示:

(为简洁起见,省略了数组到缓冲区的方法 - 取自http://qnimate.com/passphrase-based-encryption-using-web-cryptography-api/

这失败了,但未指定DOMException,我不知道下一步该做什么。

0 投票
1 回答
1745 浏览

javascript - 如何使用 AES-GCM 从 IE 11 加密操作的结果中解密数据

我已经设法在 Windows 10 上使用 IE 11 使用 AES-GCM 加密了一些数据,但我无法进行解密。加密JS代码示例:

结果项 (encResult) 是一个 AesGcmEncryptResult,它具有 2 个不同属性中的加密值和标签。据我了解,我需要将它们连接起来并将它们作为密文传递以进行解密,如下所示:

然后我连接 oncomplete 和 onerror 和 onerror 火灾。不幸的是,除了 type = "error" 之外,IE 的 Event 对象没有什么可告诉我的。

网上关于在 IE 11 中使用 AES-GCM 的信息很少。

请不要告诉我使用其他浏览器。这一切都适用于 Chrome 和 Firefox(但不同)。我特别想让它在 IE 11 中工作。

我错过了什么?

0 投票
1 回答
5442 浏览

javascript - 使用 Web Crypto 导入 PEM 密钥

我将 CryptoKey 导出为 PEM 样式,现在我想将其导入回来。我使用以下代码生成了我的密钥:

我正在尝试使用以下代码导入字符串(pem 样式)的私钥:

不幸的是,它返回此错误:

更新

convertPemToBinary 函数

convertPemToBinary 函数中使用的子函数: