【问题标题】:Parsing crypto ECDH public key into JWK format to use it with WebCrypto将加密 ECDH 公钥解析为 JWK 格式以与 WebCrypto 一起使用
【发布时间】:2016-09-20 00:56:16
【问题描述】:

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

const ecdh = crypto.createECDH('secp384r1');
ecdh.generateKeys();
const publicKey = ecdh.getPublicKey('hex'); 

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

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

jwk 的一个例子是

{  
  kty: "EC",
  crv: "P-256",
  x: "kgR_PqO07L8sZOBbw6rvv7O_f7clqDeiE3WnMkb5EoI",
  y: "djI-XqCqSyO9GFk_QT_stROMCAROIvU8KOORBgQUemE",
  d: "5aPFSt0UFVXYGu-ZKyC9FQIUOAMmnjzdIwkxCMe3Iok",
  ext: true,
}

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

【问题讨论】:

    标签: javascript encryption cryptography webcrypto-api jwk


    【解决方案1】:

    我没有直接的答案,但您可能想查看https://github.com/PeculiarVentures/node-webcrypto-ossl,它为您提供了 node.js 中的 webcrypto 接口。如果您不想直接使用它,可以在其 JWK 处理中找到问题的答案。

    【讨论】:

    • 感谢@rmhrisk,但该库不解析 jwk 的密钥。 github.com/PeculiarVentures/node-webcrypto-ossl/blob/master/lib/… 。我也尝试使用原始格式,但我得到了一个 DOMException 说:Unsupported import key format for algorithm
    • 你用的是什么浏览器? Safari 的 importKey 有问题
    • 我使用的是 Chrome 和 Canary,所以我想这不是问题。
    • 您能否提供示例代码以便我可以重现该问题,我将对其进行调查。虽然也许在 repo 中创建一个问题以便更好地跟踪会更好。
    • 尼克,这是旧的,但我已经确认我们确实支持 JWK,如果您有问题,请提交错误。
    【解决方案2】:

    也许key-encoder-library 可以提供帮助。尝试导出为 PEM 并检查是否有效。考虑使用 node-webcrypto-ossl-lib 创建您的密钥。 'jwk' 格式在开发过程中是一个真正的帮助。可以像这样轻松克隆导出的密钥:

    cloneK = JSON.parse( JSON.stringify( exportedKey ) )
    

    【讨论】:

      猜你喜欢
      • 2019-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-04
      • 1970-01-01
      • 2019-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多