如何转换节点加密.generateKeyPairSync到Deno?



我想将以下代码从Node (v18.1)程序转换为Deno (v1.22),其中SSH密钥交换期间生成密钥对:

// generate.mjs
import { generateKeyPairSync } from "crypto";
const keys = generateKeyPairSync("x25519");

上面的代码是一个较大的SSH客户端的一部分,当在Node兼容模式(--compat)下运行时,它主要在Deno中工作。但是,generateKeyPairSync尚未实现,因此我想将其更改为Deno等效:

deno run --compat --unstable --allow-env ./generate.mjs
error: Uncaught Error: Not implemented: crypto.generateKeyPairSync
throw new Error(message);
^
at notImplemented (https://deno.land/std@0.142.0/node/_utils.ts:22:9)
at generateKeyPairSync (https://deno.land/std@0.142.0/node/internal/crypto/keygen.ts:662:3)
at file:///C:/Users/gjzwiers/repos/nodeno_ssh/generate.mjs:3:14

我在WebCrypto API中查看了generateKey,但似乎不支持x25519?在WebCrypto API中是否有x25519的替代方案,或者是否有另一种方法可以在Deno中工作?

我最终使用了评论中建议的外部模块。我使用node-forge生成一个密钥对,当在Node兼容模式下运行Deno时,它可以很好地工作:

// deno run --compat --unstable --allow-env --allow-read generate.mjs
import forge from 'node-forge';
const ed25519 = forge.pki.ed25519;
const keypair = ed25519.generateKeyPair();

编辑:--compat已被npm:url在Deno的最新版本所取代。你现在可以使用:

// deno run generate.mjs
import forge from 'npm:node-forge';
const ed25519 = forge.pki.ed25519;
const keypair = ed25519.generateKeyPair();

最新更新