【问题标题】:How to generate SSH 2 RSA key in C# application?如何在 C# 应用程序中生成 SSH 2 RSA 密钥?
【发布时间】:2024-01-08 07:03:01
【问题描述】:

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

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

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

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

非常感谢!

【问题讨论】:

标签: c# .net ssh rsa putty


【解决方案1】:

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

但是,实际上已经有人完成了这项工作并创建了一个 NuGet 包来生成 SSH 密钥: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

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

【讨论】:

    【解决方案2】:

    我找到了解决方案: 从 Nuget 库下载 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;
    }
    

    干杯!

    【讨论】:

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