问题标签 [subtlecrypto]

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 回答
199 浏览

javascript - 导入公钥“SubtleCrypto”时出错:提供的值无法转换为序列

我正在尝试将公钥导入crypto.subtle,但出现了一个神秘的(双关语)错误:

未捕获(承诺)类型错误:无法在“SubtleCrypto”上执行“importKey”:提供的值无法转换为序列。

这是我的钥匙:

这是我导入的方式:

我究竟做错了什么?

0 投票
0 回答
318 浏览

openssl - 使用 window.crypto.subtle.decrypt 在浏览器中解密 AES 加密图像

业务用例:

在我的应用程序中,我允许用户上传图片。现在在将其存储到文件系统之前,我希望对图像进行 aes 加密。为了在浏览器中显示图像,我想在浏览器中动态解密它们。所以基本上它们将在静止时被加密,并在播放时被解密。

我已经实施了什么:

我使用开放 ssl 和 AES 265 CBC 算法加密了图像。下面是我使用的命令

在前端,我向服务器发送 HTTP 调用以将加密图像读取为 blob,然后我尝试使用 window.crypto.subtle.decrypt 函数解密该 blob。下面是代码

但是我在浏览器控制台中遇到了以下列出的错误

问题:

我有2个问题请教各位,

  1. 帮我解决这个错误,因为我在互联网上找不到太多帮助
  2. 如果您过去做过此类工作,请建议我更好的方法或分享您的经验。
0 投票
1 回答
445 浏览

rsa - 无法使用 SubtleCrypto Web Crypto API 解密使用 PyCryptodome 加密的 RSA-OAEP 消息

在服务器端,我使用PyCryptodome使用RSA-OAEP(使用 SHA-256)加密消息。
我正在尝试在客户端使用SubtleCrypto Web Crypto API 解密消息,但它给了我一个DOMException错误,没有更多详细信息。
在 SubtleCrypto 上,我可以毫无问题地导入 PyCryptodome 中生成的私钥,但是当我尝试解密消息时它给了我错误。

我还尝试在客户端导入 PyCryptodome 上生成的公钥,以使用 SubtleCrypto 加密相同的消息。在这种情况下,我可以使用与以前相同的流程毫无问题地解密它。

这两个库之间的 RSA-OAEP 算法是否不兼容?我注意到 PyCryptodome在各自的文档中引用了RFC 8017(v2.2)和 SubtleCrypto RFC 3447(v2.1) 。

编辑

  • 服务器端代码(pycryptodome==3.9.8):

  • 客户端代码

0 投票
0 回答
46 浏览

javascript - 如果 importKey() 已经有了,为什么还要在 decrypt() 中定义算法?

要使用Web Crypto API解密某些内容,您必须首先导入密钥:

这将返回一个承诺。如果您附加.then(function(importedKey) {})到它,您将能够使用实际导入的密钥来解密:

我的问题是......既然导入的密钥对象已经指定了算法,为什么在尝试进行实际解密时需要重新指定算法?

与此相关,importKey似乎支持 RSASSA-PKCS1-v1_5 作为算法,但解密不支持。如果 decrypt() 不支持 RSASSA-PKCS1-v1_5 那么为什么 importKey?

0 投票
0 回答
367 浏览

javascript - Web Crypto API:如何导入 RSA 私钥

我有 2 个不同的网络软件。在其中之一,我想使用来自服务器的公钥加密浏览器中的用户数据,并将加密的用户数据存储在数据库中。之后,我希望有可能在服务器端或浏览器上解密这些数据。

我试图创建概念证明 - 它适用于由 Web Cypto API 本身生成的密钥,但无法使用来自其他来源的密钥。

如何重现:

我使用 OpenSSL Ruby 标准库创建了 RSA 密钥

我正在尝试使用它们通过 Web Crypto API 加密/解密消息。但是我在导入私钥时遇到了错误。在 DevTools 中,我认为它Error没有回溯。

有人可以建议我如何实现目标?

这是代码沙箱链接

0 投票
1 回答
75 浏览

javascript - JavaScript SubtleCrypto 生成 176 位 AES 密钥而不是 128 位?

我正在开发一款将出于各种目的与 NodeJS 服务器通信的游戏,并且我目前正在尝试对请求有效负载实施一些 AES 加密。在服务器和用 JS 制作的测试工具之间进行测试时一切正常,但是当我尝试将客户端代码移植到另一种没有 Web Crypto / Subtle Crypto 实现的语言时,我开始收到有关 AES 密钥的错误长度。

调查它,我发现生成的 AES 密钥(通过window.crypto.subtle.generateKey)是 176 位长,即使我指定了 128 的 AES 密钥长度。我以 JWK 格式导出密钥,奇怪的是算法被列出如A128CBC,提示应为128位。

因为无论如何我都会生成一个新密钥,所以我毫不犹豫地在这里发布有问题的导出 JWK:

谁能解释这些额外的 6 个字节是从哪里来的?移植客户端上的 AES 实现需要 128 位密钥,如果不是 128 则只会抛出错误,从而使整个项目停止,直到解决此问题。

0 投票
0 回答
196 浏览

javascript - 无法在 Firefox 的 IndexedDB 对象存储中存储 CryptoKey

我需要在 IndexedDB 数据库中存储一个 ECDH P-384 密钥对。这是生成密钥对的代码:

这是打开数据库的代码,如果它不存在则创建“非对称”对象存储,然后生成并存储密钥对:

此代码在 Chrome、Chromium Edge、macOS Safari、iOS Safari 和 Android 上的 Chrome 上运行良好,但在 Firefox 上不起作用。它不允许它将两个 CryptoKey 对象存储在对象存储中,并生成错误:
Uncaught (in promise) DOMException: The object could not be cloned.
当我尝试存储字符串而不是 CryptoKey 对象时,错误消失了,我可以看到存储在“存储" 开发者工具的标签。为什么不让我将 CryptoKey 存储在 Firefox 的对象存储中?除了导出密钥之外,还有其他解决方法吗?

0 投票
0 回答
330 浏览

javascript - 如何在 JavaScript 中使用 PKCS#8 导出 SubtleCrypto ECDSA 私钥?

我正在尝试导出我在 JavaScript 中使用 SubtleCrypto 生成的 ECDSA(这可能也适用于 ECDH)私钥。根据 MDN(是的,这是 for importKey,但这是您从 for 页面链接的地方exportKey),我可以为此目的使用 PKCS#8,因此我将以下代码片段放在一起,旨在实现这样的导出:

这适用于 Chromium 和 GNOME Web (WebKit)。在 Firefox 中,我在控制台中记录了以下错误:

这似乎来自后一种表达方式,即对exportKey. Firefox 支持对我和我正在做的事情很重要,所以我想弄清楚这一点,我想这与其说是 Firefox 中的错误,不如说是我做错了什么,所以我认为这是最好弄清楚而不是说无论如何都不支持Firefox。

有人可能认为这是由于 Firefox 不支持使用 PKSC#8 导出 EC 密钥,但查看 MDN 上的兼容性表似乎并非如此,因为它被标记为从版本 34 及更高版本开始支持并且没有实现笔记。我跑题了。

我在这里可能做错了什么,我怎样才能让它工作?

0 投票
1 回答
789 浏览

flutter - AES GCM 使用 web 微妙加密进行加密并使用颤振加密进行解密

我正在尝试使用SubtleCrypto加密 webextension 中的某些内容,并使用cryptography对其进行解密。我想使用密码来加密消息,将其发送到应用程序并使用相同的密码对其进行解密。为此,我使用 AES GCM 和 pbkdf2

我能够在 Mozilla 文档页面上找到一个加密片段。但是,我很难在颤抖中解密它。

我也有术语问题。SubtleCrypto 使用 iv、salt 和标签,而 Flutter 加密使用 nonce 和 mac。

Javascript代码:

飞镖代码:

我究竟做错了什么?

0 投票
1 回答
135 浏览

encryption - SubtleCrypto 导入密钥对未处理错误错误:整数太大

我正在做一个简单的概念证明,通过 node.js 和使用 SubtleCrypto 的浏览器通信导出和导入私钥和公钥。我已经安装了 @peculiar/webcrypto 包来保持前端和后端之间的一致性。第一部分只是密钥的生成和导出,第二部分是我尝试导入密钥。这是代码:

键的导入是引发错误的地方:

我似乎看不出问题出在哪里,以及为什么密钥编码和解码会失败。如果有人有任何线索或想法,那将非常有帮助:)