Nodejs 使用 public 键字符串构造 public 键

Nodejs construct the public key using public key string

我有一个public键字符串如下 let pk_str = "public key strig here" 我正在使用库 jose 来验证 JWS

            (async() => {
                const decoder = new TextDecoder();
                const jws = vc_proof_value;
                const { payload, protectedHeader } = await compactVerify(jws, pk_str);
    
                console.log(protectedHeader)
                console.log(decoder.decode(payload))
              })();

我在尝试 运行 脚本时遇到以下错误

(node:75986) UnhandledPromiseRejectionWarning: TypeError: Key must be one of type KeyObject, CryptoKey, or Uint8Array. Received type string

有没有办法构造密钥?

在 NodeJS 中(我指的是 NodeJS,因为你已经标记了这个),public 键作为 KeyObject 传递,它是用 crypto.createPublicKey() 创建的。您没有对密钥说太多,大概是 PEM 编码的(因为它是一个字符串)。在这种情况下,您只需传递 PEM 编码的密钥:

var key = crypto.createPublicKey(pk_str);

如果在 compactVerify() 调用中 pk_strkey 替换,验证有效。

除了 PEM 密钥(默认)外,还支持 JWK 和 DER 密钥(X.509/SPKI 或 PKCS#1)。

Here 是所有适用函数的 key 参数的文档。