我使用.NET类RSACryptoServiceProvider
获取密钥对:
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
File.WriteAllText ("PublicKeyOnly.xml", rsa.ToXmlString (false));
File.WriteAllText ("PublicPrivate.xml", rsa.ToXmlString (true));
}
现在,我想在openSSH中使用它,但键格式看起来并不相同。 有谁知道如何将公钥和私钥转换为openSSH可以使用的文件?
谢谢!
答案 0 :(得分:8)
我真的需要与RSACryptoServiceProvider实现Openssl互操作性,以便我可以实现软件许可证密钥系统(Ref)。
我需要能够使用openssl在Linux中创建私钥和公钥,以便以后可以在PHP Web应用程序中用于许可管理。但是,也可以将它们作为VB.Net应用程序中RSA签名许可证系统的基础。
经过一周的搜索,我终于发现这是完全可能的,所以我想我会分享它。
从Linux(或任何其他有用的操作系统)开始,并使用openssl创建私钥(private.pem),公钥(public.pem),证书(certificate.crt)和个人信息交换文件( certificate.pfx)。不要担心CN和emailAddress字段,证书和pfx文件仅用作将公钥或私钥导入RSACryptoServiceProvider对象的工具。
openssl genrsa -out private.pem 1024
openssl rsa -in private.pem -out public.pem -pubout
openssl req -nodes -x509 -days 3650 -subj '/CN=www.example.com/emailAddress=info@example.com' -new -key private.pem -out certificate.crt
openssl pkcs12 -export -out certificate.pfx -inkey private.pem -in certificate.crt
现在将私钥插入代码:
Dim cert As New X509Certificate2("certificate.pfx", "", X509KeyStorageFlags.Exportable)
Dim rsaProvider As RSACryptoServiceProvider = DirectCast(cert.PrivateKey, RSACryptoServiceProvider)
如果您需要私钥或公钥,请尝试:
msgbox(rsaProvider.ToXmlString(True)) 'Private key in XML format
msgbox(rsaProvider.ToXmlString(False)) 'Public key in XML format
将公钥输入代码:
Dim cert As New X509Certificate2("certificate.crt")
Dim rsaProvider As RSACryptoServiceProvider = DirectCast(cert.PublicKey.Key, RSACryptoServiceProvider)
如果您需要公钥,请尝试以下方法:
msgbox(rsaProvider.ToXmlString(False)) 'Public key in XML format
更多来......
答案 1 :(得分:2)
这篇关于使用OpenSSL and RSACryptoServiceProvider的博文说明这是可能的,但作者最终使用Chilkat RSA库最终在C#中与OpenSSL进行互操作。 .NET世界不支持PEM格式,因此您可以使用JavaScience中名为OpenSSLKey.cs的库;但是,正如博客文章的作者提到他们因此而遇到问题(quoted):
OpenSSL:只能签署一小部分 适合单个块的数据。 数据被填充并签名。该 反向称为“验证”,并在其中 情况下数据是“无符号的”然后 unpadded和原始数据是 返回。
[Windows]:可以签署任意数量的 数据。 Sign *方法首先哈希 数据然后填充哈希值 签。 Verify *方法期望 三个输入:原始数据,a 哈希算法名称和签名 数据。原始数据经过哈希处理 取消签名/取消签名的结果是 与原始的哈希相比 数据
所以我建议您使用Chilkat RSA库。