如何在 C# 应用程序中生成 SSH 2 RSA 密钥?

Gáb*_*kos 8 .net c# ssh putty rsa

我想编写一个应用程序来生成 SSH 2 RSA 公钥和私钥。

我想获得 PuTTY 密钥生成器可以生成的格式的密钥。

在此处输入图片说明

在 ChilKat 的帮助下,我也可以生成公钥和私钥,但我不知道如何获得这种格式。

是否有任何示例可以获取该格式的密钥,或者我错过了什么?

非常感谢!

Jan*_*ann 5

SSH 密钥格式相当复杂;如果你想自己实现它,thisthisthis answer可能是一个好的开始。

但是,其他人实际上已经完成了这项工作并创建了一个用于生成 SSH 密钥的 NuGet 包:SshKeyGenerator。现在,该包同时提供给 .NET Framework 和 .NET Standard。源代码可在GitHub找到

示例代码:

static void Main(string[] args)
{
    int keyBits = 2048;
    string keyComment = "mykey";

    var keygen = new SshKeyGenerator.SshKeyGenerator(keyBits);

    Console.WriteLine(keygen.ToPrivateKey());
    Console.WriteLine(keygen.ToRfcPublicKey(keyComment));
}
Run Code Online (Sandbox Code Playgroud)

生成(缩短可读性)

-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA7ejxsqTKLMLht6HVC57l59mMzQNIVdeMaPzxM14VYjkyU1rg
...
L4NAI1BCgGpSC+iY3QuVwK8GVphVSzNrOQj97Uuhx0WYsEdPzJvjQw==
-----END RSA PRIVATE KEY-----

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD...nFX7Rhou4OdkDGA1 mykey
Run Code Online (Sandbox Code Playgroud)

需要注意的是包目前还没有支持设置私钥密码。


Gáb*_*kos 2

我找到了一个解决方案:从 Nuget Gallery下载Chilkat.NET Nuget 。借助该库,您可以通过以下方式生成 RSA 密钥对:

public ISshKeyPair RsaKeyPair()
{
   Chilkat.SshKey key = new Chilkat.SshKey();

   bool success;
   int numBits;
   int exponent;
   numBits = 2048;
   exponent = 65537;
   success = key.GenerateRsaKey(numBits, exponent);
   var sshKeyPair = new SshKeyPair();
   sshKeyPair.PublicKey = key.ToOpenSshPublicKey();
   sshKeyPair.PrivateKey = key.ToPuttyPrivateKey(false);
   if (!success) RsaKeyPair();
   return sshKeyPair;
}
Run Code Online (Sandbox Code Playgroud)

干杯!

  • 我认为 Chilkat 是付费软件。您能提供另一种带有免费源代码的方法吗?谢谢 :) (2认同)