问题标签 [webcrypto]
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.
webcrypto - @PeculiarVentures 的 `webcrypto` 和 `node-webcrypto-ossl` 有什么区别?
我是 GUN 的作者,我喜欢你的作品!
我对应该使用哪些库或哪些库相互依赖有点困惑:
node-webcrypto-ossl
webcrypto
webcrypto-core
node-webcrypto-p11
或者其他我应该知道的。
谢谢!
javascript - WebCrypto 执行问题,由于数据类型错误而失败,并将所有处理结果编译在一个统一的字段中
我正在尝试使用静态 RSA 公钥来加密会话生成的 AES 密钥,然后用于加密密码,并且随机生成的 AES 会话密钥输入 RSA 加密密码有以下错误消息:
我尝试将随机生成的 AES 密钥数据(通过导出)转换为 Uint8Array 缓冲区,然后再将其转换为 ArrayBuffer 以在 RSA 加密代码中使用,但不知何故它不起作用。
在@pedrofb 的帮助下设法转换数组缓冲区字段后,我尝试将所有结果拉到一个统一字段中,以便集中存储处理后的输出,这会产生不一致的输出。
这是修改后的源代码,它修复了失败的执行,但产生了另一个问题,即在 HTML“输入”字段中没有一致的输出值。HTML 输入字段仅显示在所有操作中收集的部分数据。我正在尝试使用“隐藏”字段作为一种收集器来收集所有已处理的结果,但是当我将处理后的结果转移到非隐藏字段时,它只显示为部分。
以下是存档出现问题的原始源代码:
go - Golang rsa-oaep 解密失败,前端使用 webcrypto
我有这个用 Golang 编写的应用程序作为后端,Typescript 作为前端。我需要对传输的数据进行加密所以我选择RSA加密,基本上步骤如下:
* 后端 *
- golang生成私钥和公钥,保存在redis中
- Golang 使用lestrrat-go/jwx/将公钥转换为 JWK(json web key)
- Golang 发送 JWK
* 前端 *
- Typescript 使用 Webcrypto API 导入 JWK 密钥
- Typescript 使用导入的密钥加密一些纯文本
- 加密后,我得到一个 ArrayBuffer,为了防止出现任何编码问题,然后我将 ArrayBuffer 字节转换为整数数组
- 将转换后的整数数组发送到字符串化 JSON 中的后端
* 后端 *
- Golang 接收 JSON 并将整数数组转换为
[]byte
- 从redis中检索私钥然后解密
现在我得到的只是一个decryption error
...
我检查过的事情:
- 后端 Golang 单独加密/解密就好了
- 前端 webcrypto 单独加密/解密就好了
检查 golang rsa.PublicKey -> JWK 期间是否出现任何问题
- 如果前端从后端获取 jwk
- 导入它
- 然后导出
- 将导出的密钥发送回后端
- 后端将jwk转回rsa公钥,等于redis中保存的公钥
后端收到 int 数组并转换为 后
[]byte
,它的长度和内容等于前端的
代码如下:
更新
在此处添加一些打印日志:
- 后端:
- 前端:
ssl - 误解了 Web Crypto API 的安全上下文?
根据关于 Web Crypto Subtle API 的 MDN 文档,以及这个答案: TypeError, 'digest' of undefined, in development environment
我了解该 API 仅适用于 localhost 或通过 HTTPS 协议。
因此,为了验证这一点,我使用此 API 在桌面上的 NGinx 代理后面部署了一个前端应用程序,并尝试从另一台计算机连接到此应用程序。
使用 Chrome,代码已被阻止,因为我没有在 HTTP 上连接。
但是使用 Firefox,这些工作没有任何警报。我错过了一些关于 Firefox 的东西吗?
javascript - Webcrypto PBKDF2-SHA1
我在使用带有 Webcrypto 的 PBKDF2 时遇到问题。我想将 PBKDF2 与 SHA-1 算法一起使用。目前,我有,
但是我知道我一定是用错了,因为它是受支持的密钥派生算法,并且根据 Mozilla 的精彩文档,derivedKeyAlgorithm
支持 HMAC 以及 HMAC-SHA1。我也让它AES-GCM
相当直接地工作。
当我尝试时,我收到的错误消息,
是Uncaught DOMException: Cannot create a key using the specified key usages.
注意:我了解不再推荐使用 SHA1,这是为了支持旧版。
注意2:当我将上面的内容替换为时,它可以工作,
谢谢你。
javascript - 使用 PKI 证书与浏览器进行签名
我有一个非常简单的用例。我的 Web 应用程序的用户应该能够对某些工作流程步骤的输出进行签名。该网站是通过相互 ssl 保护的,因此当用户登录时,系统会提示他通过他的证书。这很好,所以我知道,浏览器可以访问证书(通过 Firefox 的加密模块或 Chrome 中的 Windows 密钥库从 PKI 卡)。从那时起,应该很容易在浏览器中使用用户的证书。但似乎没有一个明显的方法。
我尝试了什么:
谷歌
有一些 StackOverflow 问题(但似乎都很旧):
网络加密API
这个 API 似乎很棒。而且那个用例似乎正是我所需要的。但最终的实现似乎没有那个能力
pkjs
作为 webcrpypto api,该功能似乎没有被实现
网络加密密钥发现
那是缺少的链接吗?我不确定....
为什么是一个新问题?由于我们现在已经 2020 年,旧的问题和答案包含很多过时的东西(active-x,java-applet),所以我希望我们能够得到一个清晰明了的答案,使其成为可能而无需任何变通办法。
更新:恐怕还是不可能:https ://techblog.bozho.net/electronic-signatures-using-the-browser/
javascript - JWK“key_ops”成员与 Web Crypto 调用指定的成员不一致
在 NodeJS 上,我生成密钥并将其导出如下,
现在,当我尝试在使用 Chrome 浏览器的客户端上导入导出的密钥时,它会引发 DOM 异常,我像这样导入它,
错误是,
令我惊讶的是,我可以在 Node 上导入相同的东西而不会出现任何错误。我的意思是客户端以几乎相同的格式生成 JWK。
encryption - 有没有办法解密密码?(网络加密?)
我离加密\解密还很远,但最近我遇到了这样的问题:
这里应该是示例加密密码或短语,已知它是使用 WebCrypto 加密的。但是所有解密示例都将短语表示为 base64,将 salt/iv 表示为十六进制。可能存在以正确方式将其转换为十六进制的函数,或者可能没有办法用上面的数据解密这个?
javascript - Uncaught (in promise) DOMException: key.algorithm does not match that of operation
生成 RSA-OAEP 密钥对(根据http://www.w3.org/TR/WebCryptoAPI/#algorithm-overview。)
当用户创建秘密时,秘密使用 AES-GCM-256 和随机生成的中间密钥进行加密。最后,这个中间密钥与用户的公钥一起包装。
最后解开中间密钥和解密。
该错误是在展开中间密钥期间生成的。
javascript - WebCrypto JS SHA256 HMAC 不匹配
我有两个生成 SHA256 HMAC 的脚本,带有纯文本消息和 Base64 编码密钥。一种是用 PHP 编写的,另一种是用 JavaScript 编写的。PHP 脚本返回正确的 HMAC,但由于某种原因 JS 版本没有。这是什么原因造成的?
以下是代码示例,带有经过编辑(本质上仍然相似)的密钥。
PHP
这个脚本,返回MTYxNDExNzczNzQ2NztFdXcwQ1l0bTBTMkdIdnZ2ZnN2ZGFkTEFDMGVPbVlJeHFzZk9PQWExS1BzPQ==
JS
哪个返回MTYxNDExNzczNzQ2NztBeGxFRVJCTzVYWm5KN2ZHNCtoeWlxalJ0VmxZQmJpekNUSEwzcldMQVhzPQ==
为什么这些看似相同的脚本会返回不同的结果?