问题标签 [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 投票
0 回答
193 浏览

javascript - 在 WebCrypto AES 中发送 IV

我正在尝试使用 AES-CBC 跨不安全的传输边界传输消息。我使用crypto.getRandomValues 生成了IV(在发送方)。然后我使用crypto.subtle.encrypt 加密消息。作为消息的一部分,我计划附加 IV 并将其发送给接收者。从安全角度来看,传输未加密的 IV(使用 AES-CBC 时)是否安全?

0 投票
1 回答
447 浏览

javascript - 带有 AES-KW 的 unwrapKey 函数在 IE11 中不起作用

在 MS Edge 上,以下解包代码有效:

IE11 实现基于 W3C WebCrypto API 的未完成版本,有一个文档,但没有任何示例代码可用,我的尝试到目前为止还没有奏效。以下不会在 IE11 上引发错误,但结果键为空:

这是您可以运行的JSFiddle 。

0 投票
2 回答
11546 浏览

javascript - 如何加载 PEM 格式的公钥进行加密?

到目前为止,我使用的是 JSEncrypt,它能够从 PEM 格式的字符串中加载公钥。然后将其与 RSA 一起使用以加密字符串。例如 :

接着:

我想对 WebCrypto 做同样的事情,但我不明白该怎么做。我尝试了以下步骤:

  1. 删除 PEM 标头
  2. 删除 PEM 页脚
  3. 删除 CR/LF
  4. 修剪字符串
  5. 解码 Base64 字符串
  6. 将结果转换为 ArrayBuffer

然后我尝试导入密钥:

我尝试了很多方法(解压 ASN/DER 格式等)但我得到了各种错误(DOMException 数据等)。我不知道 PEM 格式是否可以作为受支持的格式接受,或者我是否必须将密钥转换为 JSON Web Key 格式等。

没有 3rd-party JS 库有没有简单的方法?

0 投票
1 回答
15125 浏览

javascript - 如何使用 Javascript WebCrypto API 加载 PKCS#12 数字证书

我正在尝试使用 WebCrypto API 对数据进行签名,但不是创建私钥/公钥并将其导出到 pkcs#1 或 8,我真的很想使用用户的 PKCS#12 对数据进行签名。我已经阅读了 W3C 规范,但不能充分利用它,也找不到任何关于如何做到这一点的好材料。现在我想把 ActiveX 和 Java Applet 放在一边。有没有办法调整以下内容:

任何指针?

更新 这是我一直在工作的代码

0 投票
1 回答
2613 浏览

javascript - 通过 WebCryptoAPI 在浏览器中生成 ECDH 密钥,而不是通过浏览器化的节点加密模块

我有一个非常小的节点脚本来创建公钥/私钥有没有办法在客户端执行它而无需浏览孔加密模块?

到目前为止,我已经尝试过:

但是当我记录它时它看起来不像节点版本

0 投票
1 回答
244 浏览

javascript - 无法使用 webcrypto API 验证 CMS 签名的消息

我想使用 JavaScript webcrypto API 验证 CMS 签名的消息。该消息是根据 RFC 3161 的时间戳响应的一部分。

Wireshark 展示

因此,我获取签名、内容(来自 encapContentInfo)和公钥,并将其传递给导入密钥并验证签名的以下函数:

输出如下:

如您所见,验证失败,但我很确定签名是有效的,因为这个时间戳服务器被很多人使用。

我的实施有什么问题吗?

我尝试在 Firefox 扩展中执行此操作。

编辑:似乎需要使用 signedAttrs 字段的 DER 值,对其进行哈希处理,然后使用证书对其进行验证。

0 投票
2 回答
1252 浏览

javascript - Javascript RSA-OAEP does not work on arbitrary input lengths

I'm trying to encrypt a string in javascript (firefox) using SubtleCrypto. The problem with that is, that the encryption only works for short inputs. Once the string (testdata) is longer than 190 characters, it will fail with an OperationError. Why does SubtleCrypto behave like that and how can I resolve it?

Code:

0 投票
1 回答
1180 浏览

javascript - WebCrypto API:如何使用公钥解密 RSA 加密消息?

我有一条可以用 openssl 解码的 RSA 加密消息:

如何使用 WebCrypto API 实现这一点?尝试以下操作时出现错误:

(见https://jsfiddle.net/tz2cpze6/1/

0 投票
1 回答
1332 浏览

javascript - Python 中的 Web Crypto API JWK 用法

我正在开发一个 P2P 基础设施,它将拥有来自一组不同应用程序的数据,这些数据通过网络分布。这个 P2P 覆盖由一组 Python Twisted 服务器组成。

我需要为每个应用程序的每个用户保证存储数据的安全性和隐私性。因此,我使用Web Crypto API在 Web 应用程序的客户端生成一对 RSA 密钥。RSA 密钥对也将存储在 P2P 覆盖中。所以,我在客户端加密了私钥和用户密码的派生。

此外,我正在使用jwk to pem模块将 JWK 公钥转换为 PEM 密钥,以便在 Python 密码库(PyCrypt 或 m2Crypto)中使用。

最后,我必须保证包含这些凭据的消息以及用户数据保持其完整性。因此,在客户端,我使用用户的私钥对这些数据进行签名。

我将 ArrayBuffer 类型的数据和签名发送到服务器,以 base64 编码。

之后,当 Python 服务器收到这个 http 请求时,它会从 base64 解码数据和签名。

为了验证签名,需要公钥。最后:

(utils.byteify() 将 unicode 字符串转换为常规字符串)

验证签名:

方法定义:

但是,签名验证返回 False。我也尝试使用 m2crypto 库,但它返回 0。

0 投票
1 回答
1243 浏览

javascript - 如何使用私钥加密 Web Cryptography API 中的数据

我已按照教程使用公钥加密数据并使用私钥解密浏览器上的数据。
但是当我尝试使用私钥加密数据时,它会以Uncaught (in promise) DOMException: key.usages does not permit this operation.
如何使用私钥加密 Web Cryptography API 中的数据?
我也在寻找一个 javascript 库,它允许我生成 RSA 密钥对,加密和解密浏览器上的数据。我找到了一些 RSA javascript 库,但它们都需要使用 open-ssl 命令来生成 RSA 密钥对。