问题标签 [window.crypto]

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

javascript - 带有 OS 密钥库的 chrome 上的 js 签名

W3C 正在努力http://www.w3.org/TR/WebCryptoAPI/定义一种从 javascript 生成数字签名、加密等的方法。基本上在对象中定义了一个新对象cryptowindow其中DOM必须为 javascript 提供签名和加密功能。Chrome 开始实现这个对象,该对象目前在其 javascript 引擎中可用(我认为在 beta 阶段),我尝试用它生成一些签名,似乎可以正常工作,但我认为生成数字签名的最实用方法是这个新对象使用操作系统密钥库中的私钥来代替自动生成的密钥材料,但此工作草案未涵盖此访问权限。

我已经使用签名小程序处理 OS 密钥库(MS、Firefox KS、MAC OS X)工作了多年,但如果可以避免小程序最后几天产生的所有问题,我想直接在 javascript 中执行...新的 oracle 安全要求、新的 MANIFEST.MF 属性、浏览器阻止插件等等,这些真的很痛苦!

所以我正在寻找一种javascript方式来做到这一点,似乎所有主要浏览器都采取了自己的方式:

  • 在 Internet Explorer 中有一个 ActiveXObject 可以访问 Windows 密钥库:

    /li>
  • 要访问 firefox 密钥库,firefox 似乎添加了一个signText方法window.crypto(有关 firefox webCryptoAPI 实现的更多信息here和关于专有实现的here):

    window.crypto.signText("textToSign", "ask");

编辑:自版本 34 以来已弃用此 firefox 方法,因为它不是标准:https ://developer.mozilla.org/en-US/docs/Archive/Mozilla/JavaScript_crypto

然而,在 chrome 上似乎目前不存在任何相同的事情。

那么任何人都知道如何在 Chrome 中实现这一点?任何人都知道在所有浏览器中这样做的通用 js 方式吗?任何给我正确方向的建议将不胜感激。

谢谢!

0 投票
1 回答
1606 浏览

firefox - Firefox 33 之后 window.crypto.logout 的替代品或替代品是什么

前一天,我们正在使用 window.crypto.logout 清除客户端相互 SSL 身份验证。

在 firefox 33 之后,有谁知道我们如何清除客户端 SSL 身份验证?

谢谢你

0 投票
1 回答
2392 浏览

javascript - 在 Service-Worker 中使用 Crypto Node.js 加密并使用 window.crypto 解密

源代码:https ://github.com/HectorAnadon/Crypto-NodeJS-window.crypto

我正在使用 AES-128-GCM 将加密图片从 node.js 服务器发送到我试图解密它的服务工作者(在 Web 浏览器背景中运行的脚本)。通信效果很好,因为未加密的图片显示在网络浏览器中。

问题是:当我在服务工作者中解密时,在承诺 cryptoSubtle.decrypt 中,我得到一个异常,这是控制台为我打印的内容:解密错误:OperationError:(匿名函数)@ service_worker.js:310

service_worker.js 中的第 310 行是:console.error("解密错误:" + err); //第310行

你知道我做错了什么吗?非常感谢,我真的很感激。

这是使用 Crypto Node.js 的加密代码(此处的文档:https ://nodejs.org/api/crypto.html )

这是使用 window.crypto 的 Service Worker 中的解密代码(此处的文档:https ://developer.mozilla.org/en-US/docs/Web/API/Window/crypto )

0 投票
1 回答
8059 浏览

javascript - 如何在 IE11 中使用 TextEncoder?

我正在尝试散列一个字符串。但是 IE11 和 Safari 中的 TextEncoder 函数的替代方法是什么?

hex 是我从 Mozilla 得到的一个函数

https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest

0 投票
0 回答
213 浏览

x509 - 在浏览器密钥库中保存 window.crypto 生成的私钥?

我们正在尝试实施以下工作流程:

  • 使用 window.crypto 在浏览器中生成私钥
  • 在浏览器中创建 PKCS10 证书签名请求
  • 将 PKCS10 发送到服务器
  • 服务器签署请求并返回 PEM 格式的 x509 证书
  • 浏览器为自己存储证书

在浏览器中使用 keygen 标签并使用 SPKAC 而不是 pkcs10 已经可以实现同样的效果。现在,但是浏览器不存储返回的证书,只是想保存它们。当我们尝试手动将证书导入浏览器时,我们得到“证书的私钥丢失或无效”。我们怀疑 window.crypto.generateKey() 生成的私钥没有存储在浏览器的密钥库中。如何获取存储在密钥库中的私钥?

前两步的实现基于http://blog.engelke.com/2014/08/23/public-key-cryptography-in-the-browser/

更新:由于某些浏览器使用操作系统密钥库,我也在研究通过其他方式将密钥保存到操作系统密钥库中的可能性。到目前为止我发现了什么:

Java 不能根据这个问题使用:Tell Java to use Windows keystore

在 Windows 中可以使用 ActiveX 控件。

摘要: 发现没有标准的跨浏览器和跨操作系统的方式来生成和有意义地使用 X509 证书。有一些组合(非 Windows 操作系统上的新 chrome 版本(放弃 keygen 支持))无法做到这一点。

0 投票
1 回答
180 浏览

javascript - Javascript密码生成器添加空格和失败的测试

我正在尝试构建一个密码生成器,它创建的密码符合:

  1. 最少 8 个字符,最多 40 个字符
  2. 必须包含至少 1 个大写、小写、数字和符号

我避免选择 Math.random,我更喜欢加密选项。

我已经阅读了大量文章来尝试使其正常工作,但我遇到了以下问题:

  1. 随机空格似乎出现在输出字符串中,通常出现在末尾。

  2. 输出值有时不符合 min 8 char 规则。

我意识到我可能有太多额外的 if 语句仔细检查了事情,但我很难看出哪里出了问题。

这是为了进入另一个系统,所以我将它创建为尽可能模块化和功能性。为下面的大片段道歉,我无法让它工作jsfiddle.

0 投票
1 回答
10389 浏览

javascript - Internet Explorer 11 中的 crypto.getRandomValues 有什么问题?

下面的代码通过使用生成 3 个随机数window.crypto.getRandomValues。根据开发人员的文档(Microsoft MSDNMozilla MDN),这应该可以在 IE 和 Chrome 中使用。

但实际上它只适用于 Chrome,而不适用于 Internet Explorer 11。根据微软的说法,这段代码应该可以工作——他们给出了与下面列出的代码示例类似的代码示例(参见上面的 MSDN 链接)。

怎么了?以及如何修复它以便在两种浏览器中都可以使用?

首先在Chrome中尝试此代码段,它会正确显示类似

-513632982,-694446670,-254182938

作为日志文本。

然后,复制这个问题的 URL并在Internet Explorer 11中尝试- 它显示:

错误:{“消息”:“无法获取未定义或 null >reference 的属性 'getRandomValues'”、“文件名”:“https://stacksnippets.net/js”、“lineno”:15、“colno”:2 }

或者

错误:{“消息”:“脚本错误。”,“文件名”:“https://stacksnippets.net/js”,“lineno”:0,“colno”:0 }


一些背景:在尝试使用此代码在 Javascript中生成Guid 时,我发现了此问题中描述的问题。


更新:

  • 根据下面James Thorpe 的出色回答,我在 JavaScript源代码中修复了 Guid。
  • Microsoft 的较新浏览器(例如 Edge 版本 96.0.1054.43)不再显示此问题。但是使用下面提供的答案来保持最佳兼容性仍然很好。
0 投票
1 回答
579 浏览

javascript - window.crypto.subtle 在 IIS 托管的 Web 应用程序中不起作用

我在我的应用程序中使用 window.crypto.subtle.importKey() 进行身份验证过程之一。当我在节点服务器上运行它时它可以工作,但是当我在 IIS 上托管它时它不工作。

错误:

未定义的 importKey(直到 window.crypto 我得到)

0 投票
2 回答
5439 浏览

javascript - 如何使用 Crypto Web API 获取 HMAC

如何使用 Crypto Web API ( ) 在浏览器中获取 HMAC-SHA512(key, data window.crypto)?

目前我正在使用 CryptoJS 库,它非常简单:

CryptoJS.HmacSHA512("myawesomedata", "mysecretkey").toString();

结果是91c14b8d3bcd48be0488bfb8d96d52db6e5f07e5fc677ced2c12916dc87580961f422f9543c786eebfb5797bc3febf796b929efac5c83b4ec69228927f21a03a

我想摆脱额外的依赖并开始使用 Crypto Web API。我怎样才能得到相同的结果?

0 投票
13 回答
15481 浏览

javascript - 如何使用 Jest 来测试使用 crypto 或 window.msCrypto 的函数

在反应中使用 Jest 运行单元测试时,window.cryptoAPI 会导致问题。我还没有找到一种crypto在不安装其他软件包的情况下合并到 Jest 中的方法,这是我无法做到的。因此,在不使用另一个 npm 包的情况下,有一种方法可以测试使用的函数:crypto.getRandomValues()在其中不会使 Jest 崩溃?感谢任何链接、建议或提示