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

javascript - 如何在 LocalStorage 中保存 CryptoKey?

我想在已经存在的项目上使用 Web Cryptography API。要加密和解密某些东西,我必须使用 CryptoKey,但是当我将 CryptoKey 保存到 localStorage 时,它​​只保存字符串(CryptoKey)而不是对象。

是否可以以简单类型(字符串)序列化/转换 CryptoKey?

我的解密方法是

错误信息当然是:

无法在“SubtleCrypto”上执行“解密”:参数 2 不是“CryptoKey”类型。2localStorageHandler.js:39 CryptoPromise[对象 CryptoKey]

如果我不使用 localStorage 解密,则加密数据没有问题。

0 投票
3 回答
557 浏览

javascript - 摘要返回具有不同数据的相同值

我正在使用 Javascript Forge 获取一些数据的摘要,现在实验使用不同的文档,以下代码行总是返回相同的哈希:

为什么会这样?我错过了什么吗?

尝试了不同的浏览器,但仍然是相同的 digestHash 值

0 投票
2 回答
1224 浏览

javascript - 将加密 ECDH 公钥解析为 JWK 格式以与 WebCrypto 一起使用

我生成了一个 ECDH 密钥对,并从中获取了公钥。使用 nodejs 和加密库。

我正在实现一个客户端库来使用这个公钥、ECDH 算法和来自 WebCrypto 的SubtleCrypto接口来加密数据。

为了实现这一点,我必须导入公钥(使用 nodejs 加密生成),WebCrypto importKey 方法有一些格式选项可以做到这一点,但我可以让它不使用它们。我注意到这jwk比其他人更常用。

一个例子jwk

那么如何将我的公钥解析为一个jwk对象。我的公钥如下所示: 04f8b2a6e9d2ffa424c3e7b6addf23112153920fd0209390da460f99e03bf8665052e72df4a0b7927381f1b026c98a3a2b348fdd10969875e6b0e86cb1f093a5fc07e49fbbbf091922ce71af17f4a79de03f6069836a7143b137be34451f162235

0 投票
1 回答
1821 浏览

javascript - 在 Web 应用程序中使用客户端加密时,密钥应该存储在哪里?

假设我想使用 JavaScript Web Crypto API向 Web 应用程序添加客户端加密。我的应用程序的客户端将使用他们的密钥加密每个用户的数据,然后将加密的数据发送到服务器,并解密服务器返回的数据以显示它。

用户如何为这样的应用程序存储他们的密钥,而不会使其使用不便?

是否有一些简单的方法可以将密钥存储在浏览器中?

还是每个用户都必须将其密钥保存在计算机上的本地文件中,并在每次登录时将其导入 Web 应用程序?他们可以使用像 Apple Keychain 这样的单独密码管理器吗?

0 投票
2 回答
5464 浏览

javascript - 使用 WebCrypto API 生成 RSA 密钥对并使用密码保护它

标题说明了一切。我想知道如何使用 WebCrypto API 生成 RSA 密钥对,以及如何使用密码保护它,以便将其存储在数据库中。

0 投票
1 回答
1438 浏览

javascript - 我可以从 IE11 中的 Web Worker 访问 MSCrypto 吗?

window.msCryptoIE11的 Web Crypto 位于window.crypto.

Web Worker 无法访问window上下文,但幸运的是,Chrome 和 Firefox 也在cryptoWeb Worker 上下文中公开了变量(因此,在全局级别,您可以使用this.cryptoWeb Worker 中的 Web Crypto 套件访问)。然而,IE11 似乎并未this.msCrypto在其 Web Worker 上下文中公开。

那是对的吗?有没有办法在 IE11 Web Worker 中使用 Web Crypto?

0 投票
2 回答
3731 浏览

javascript - Javascript - 来自 USB 令牌的密钥/证书

我想问一下是否仍然不可能使用 JavaScript 从USB 令牌存储在 Browser 中的证书获取密钥。我正在阅读许多文章,其中说WebCryptoApi无法做到这一点。

是否有任何选项可以从令牌中获取密钥?也许有些东西改变了?

0 投票
2 回答
5502 浏览

javascript - CryptoKey ArrayBuffer 到 base64 并返回

我想知道如何解决这个问题。我使用 WebCrypto API 生成 RSA-OAEP 密钥对,然后从导出为 ArrayBuffer 的密钥对中导出 pkcs8 中的私钥,我想将此 ArrayBuffer 编码为 base64,以便将其存储为 PEM。

在此测试示例中,我将密钥导出为 pkcs8 并将此 pkcs8 导入回 CryptoKey。问题是有时它有效,有时则无效。

这些是代码的结果: 注意:只发生这些状态中的一种,而不是同时发生。注意 2:此示例不包含 -----BEGIN PRIVATE KEY----- 前缀和后缀,我只是对密钥进行编码。

案例1:未捕获(承诺中)URIError:URI malformed(...)b64DecodeUnicode @ try.php:20b64toab @ try.php:70wayBack @ try.php:66(匿名函数)@ try.php:56

Case2: undefined:1 Uncaught (in promise) DOMException

案例 3:好的 - 一直有效。

我不知道是什么导致了错误,但我认为这与 base64 编码有关。正如我所说,有时私钥会生成 OK,有时则不会。

非常感谢您提前提供的所有帮助。

0 投票
2 回答
2734 浏览

android - Web Crypto API crypto.subtle 在 Apache Cordova 中未定义

我正在使用 Cordova 和伪造库和浏览器的Web Crypto API来执行签名importKey操作。尽管如此,Android 设备上的 Web Crypto API 仅提供crypto.getRandomValues()并且 SubtleCrypto 未定义 (crypto.subtle)。所以我认为添加Web Crypto API shrim及其依赖Promiz将修复此引用丢失,但没有任何改变。请问有什么想法吗?

在 Chrome 52.0.2743.116 中的 PC 上进行调试提供了完整的 Web Crypto API,但是在具有 Android 4.4.4 的 Chrome 版本 52.0.2743.98 的 Android 设备上。Web API 仅限于 crypto.getRandomValues()。

我基本上正在重写如何使用 Javascript WebCrypto API 加载 PKCS#12 数字证书的答案

代码示例:

在 index.html 中

内部javascript文件

0 投票
0 回答
534 浏览

safari - 如何将 SubtleCrypto 密钥对保存在 Safari 的持久存储中

我使用SubtleCrypto api创建了公钥和私钥。我正在使用webcrypto-shim来克服 Safari 中一些未实现的微妙方法。我能够生成一个密钥对并用它签署我的数据。

然后我尝试将我的密钥对保存在 IndexedDB 上,看来我的保存事务成功了,那里没有错误。但是当我想再次使用公钥进行签名时,首先我从 IndexedDB 中检索它,然后我使用SubtleCrypto.exportKey()但它失败并出现错误

TypeError:类型错误

我试图让它在 Safari 桌面 9.1.2 上工作,我也在使用IndexedDBShim

我怀疑保存并没有真正起作用,并且我的密钥没有正确存储在 IndexedDB 上。在保存事务中,我保存密钥而不导出它们,这意味着我正在保存我从中接收的对象SubtleCrypto.generateKey()

另一件事是相同的代码适用于 Chrome。