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

时间:2014-07-29 16:12:14

标签: c# ssh rsa putty

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

我想把密钥作为PuTTY密钥生成器可以生成的格式。

enter image description here

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

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

非常感谢!

2 个答案:

答案 0 :(得分:3)

SSH密钥格式非常复杂。如果您想自己实现它,则thisthisthis答案可能是一个好的开始。

但是,实际上其他人已经完成了这项工作,并创建了一个用于生成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));
}

生成(为缩短可读性)

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

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD...nFX7Rhou4OdkDGA1 mykey

请注意,该软件包当前不支持设置私人密钥密码。

答案 1 :(得分: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;
}

干杯!