我想将以下代码从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();