我想编写一个可以生成SSH 2 RSA公钥和私钥的应用程序。
我想把密钥作为PuTTY密钥生成器可以生成的格式。
在ChilKat的帮助下,我也可以生成公钥和私钥,但我不知道如何获得这种格式。
是否有任何样本可以获取该格式的密钥,或者我错过了什么?
非常感谢!
答案 0 :(得分:3)
SSH密钥格式非常复杂。如果您想自己实现它,则this,this和this答案可能是一个好的开始。
但是,实际上其他人已经完成了这项工作,并创建了一个用于生成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;
}
干杯!