SSH 密钥格式相当复杂;如果你想自己实现它,this,this和this 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)
需要注意的是包目前还没有支持设置私钥密码。
我找到了一个解决方案:从 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)
干杯!
| 归档时间: |
|
| 查看次数: |
4928 次 |
| 最近记录: |