标签: webcrypto-api

unwrapKey函数与AES-KW无法在IE11中工作

在解压缩代码后的MS Edge上工作:

window.crypto.subtle.unwrapKey(
                                "raw",
                                wrappedKey,
                                derivedKey,
                                { "name": "AES-KW", iv: iv },
                                { "name": "AES-CBC", iv: iv },
                                false,
                                ["decrypt"]
                            )
Run Code Online (Sandbox Code Playgroud)

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

window.msCrypto.subtle.unwrapKey(
                                    wrappedKey,                                        
                                    {
                                        "name": "AES-KW",
                                        iv: iv
                                    },
                                    e.target.result,
                                    false,
                                    ["decrypt"]
                                )
Run Code Online (Sandbox Code Playgroud)

这是您可以运行的JSFiddle.

javascript encryption cryptography internet-explorer-11 webcrypto-api

18
推荐指数
1
解决办法
357
查看次数

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

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

var buffer = encode(prompt("Please enter your password"));
    //TODO:
    //implement a prompt for a pfx or cert

  return crypto.subtle.importKey("raw", buffer, "PBKDF2", false, usages);
    //TODO:
    //instead of importing it, ask for the certificate's pass to sign data
    //with crypto.subtle.sign
Run Code Online (Sandbox Code Playgroud)

有什么指针吗?

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

<script src="forge.min.js"></script>

<script>
    var errorsReportedByVerifier;
    errorsReportedByVerifier = checkStorage() && checkBrowserAPIs();
    if (!errorsReportedByVerifier){
        console.log("adding click event");
        document.getElementById('btnPfx').addEventListener('click', handlePFXFile, false);
        storeVariables();
        getVariables();
    }


    function handlePFXFile(evnt) {
        console.log("handling pfx")
        //alert(document.getElementById('pfx').value);

        //error happens in 1st line
        //error object does not accept property …
Run Code Online (Sandbox Code Playgroud)

javascript digital-certificate digital-signature webcrypto-api

15
推荐指数
1
解决办法
8620
查看次数

使用JavaScript在浏览器的密钥库中访问签名/加密 - 示例代码?(WebCryptoAPI)

我有一个Web服务器,只允许使用X509身份验证进行访问.奇迹般有效.现在我想扩展X509证书(存储在用户的浏览器密钥库中)的使用

  • 在将数据发送到服务器之前对其进行签名(使用JavaScript和HTTPPost)
  • 解密从服务器读取的数据(使用存储在那里的用户公钥加密)

我发现这个例子做的RSA签名非常接近....只有它从HTML文本区域获取密钥.我想从密钥库中读取它.现在加密非常不稳定:

我正在寻找签名和加密的一些工作示例(我有一些Java,但不是基于浏览器的JavaScript).

非常感谢帮助

javascript pki digital-signature webcrypto-api

14
推荐指数
1
解决办法
1万
查看次数

Chrome中的电子智能卡数字签名

对于在浏览器上运行且需要专业人员签名的电子处方系统,我们使用Java小程序对XML请求进行签名,然后使用智能卡将其发送给WS.

但是自版本42以来,Chrome默认禁用NPAPI支持,并且在2015年9月的未来版本中,它将被完全禁用,然后applet根本不可用.

Chrome NPAPI弃用页面指向WebCrypto和TLS作为替代方案.但似乎WebCrypto 已经超出智能卡的支持范围,并且似乎TLS仅涉及加密协议,并且它没有提供使用电子卡的方法.

有人使用完全浏览器本机解决方案来签署文档并对流程有很好的控制.至少它将是nedeed:

  • 没有确认,也没有用户签名的XML请求的可视化.因为签名是对用户没有价值的内部技术请求,并且应用程序在内部LAN中受控且受信任的系统中运行.

google-chrome npapi smartcard digital-signature webcrypto-api

13
推荐指数
2
解决办法
4392
查看次数

使用纯JavaScript签署PDF

随着WebCrypto API的发展和Chrome和Firefox的支持,我想用它来对PDF文档进行数字签名.周围没有太多的文献,但我找到了一些例子[1]和一个名为PKI.js的图书馆[2].在示例中,描述了签名过程,但最终返回签名.我希望我的Base64 PDF文件在签名的Base64字符串中再次返回,但遗憾的是,这不是发生的事情.据我所知,PKI.js也没有提供签署我的Base64 PDF的方法.

有没有办法只使用JavaScript和WebCrypto API签署PDF?私钥可以输入<textarea>或甚至更好地存储在浏览器的证书设置中.

Base64 PDF(来自REST API)→使用JS和证书签名→签名Base64 PDF(发送到REST)

javascript pdf signing sign webcrypto-api

8
推荐指数
2
解决办法
2万
查看次数

如何为 Chrome 中的不安全来源启用 crypto.subtle?

在Chrome 60,他们增加了一个功能,禁用crypto.subtle非TLS连接。localhost出于安全原因,我们的产品需要运行本地服务器并转发一些安全的远程连接。因为localhost技术上不是命名域,所以我们不能使用 TLS——有效地使crypto.subtleChrome(和基于铬的浏览器,如 Opera)无法使用,并迫使我们使用安全性较低的 shim,如asmCrypto.js。有没有办法告诉 Chromecrypto.subtle通过标题启用?有没有办法在设置中禁用我们可以告诉用户的新功能(最坏的情况)?

google-chrome chromium webcrypto-api

8
推荐指数
1
解决办法
3455
查看次数

没有 ssl 的 Web 加密 API

我编写了一个用于安全消息传输的小网络应用程序,以了解有关加密的更多信息,并想向我的朋友展示它并让他们玩一下,所以我将它托管在我的小服务器上,并惊讶地发现 Web Crypto API(我竭尽全力开始工作,因为它的错误消息不是很具体)需要 SSL(有点违背了在浏览器中实现自己的加密方案的目的)!

我已经在该服务器上使用 SSL 运行了另一个 API,但我不想合并它们,而是想问:有没有办法绕过 Web Crypto API 的安全套接字要求,或者是否有另一个库允许我使用在非安全环境中具有相同或相似的功能?

javascript ssl cryptography webcrypto-api secure-context

8
推荐指数
1
解决办法
4327
查看次数

Web Crypto API - IndexedDB 中的不可精确 CryptoKey 是否足够安全,不会从一个设备传递到下一个设备?

Web Crypto API 提供了将私钥或公钥保存为客户端 IndexedDB 数据库中特殊的、不透明类型的对象的可能性,即客户端和 JS 运行时可以使用 CryptoKey,但无法拼写出来。另外,在生成或导入所述密钥时,可以规定该密钥是不可提取的。

我的目标是将个人私钥保存在用户的客户端设备上,并将其用作他的数字签名。对我来说,重要的是要知道在设备之间传递此加密密钥有多困难或容易,我的用户将此加密密钥提供给他的朋友或将其复制到他的另一台设备有多困难。

javascript security cryptography rsa webcrypto-api

7
推荐指数
1
解决办法
4685
查看次数

将数字转换为 ArrayBuffer

我正在尝试使用 AES-CTR 算法解密浏览器上的数据。WebCrypto API要求将计数器作为BufferSource传递。如何将计数器(数字)转换为预期输入(字节数组)?

我使用的是全零 IV,因此计数器从 0 开始。假设我正在尝试解密计数器 = 445566 的数据。如何将 445566 转换为 ArrayBuffer?

const key = // retrieve decryption key
const encrypted = // retrieve encrypted data

const iv = new ArrayBuffer(16)
// iv is all zeros. I need it to represent 445566, how?

const algo = {
    name: 'AES-CTR',
    counter: iv,
    length: 128
}
const decrypted = await crypto.subtle.decrypt(algo, key, encrypted)
Run Code Online (Sandbox Code Playgroud)

编辑:在挖掘了一些加密库之后,我最终使用了这个。它似乎做了我想做的事,但不知道正确性、性能等。

function numberToArrayBuffer(value) {
    const view = new DataView(new ArrayBuffer(16))
    for (var index = …
Run Code Online (Sandbox Code Playgroud)

javascript cryptography aes webcrypto-api

7
推荐指数
2
解决办法
9895
查看次数

使用 WebCrypto API 从私钥生成公钥

我正在使用Web Crypto API并使用generateKey函数生成RSA 密钥对。由于我的代码中存在一些错误,我删除了一些用户的公钥。我想知道是否有任何方法可以从私钥生成公钥?我知道这对于 ssh 密钥来说很容易实现。这是我生成 RSA 密钥对的示例代码:

const generateRSAKeys = (): Promise<CryptoKeyPair> => {
    return crypto.subtle.generateKey(
    {
        name: 'RSA-OAEP',
        modulusLength: 2048
        publicExponent: new Uint8Array([0x01, 0x00, 0x01]),
        hash: { name: 'SHA-512' },
    },
    true,
    ['encrypt', 'decrypt', 'wrapKey', 'unwrapKey'],
);
Run Code Online (Sandbox Code Playgroud)

javascript encryption rsa encryption-asymmetric webcrypto-api

7
推荐指数
1
解决办法
3452
查看次数