Hyl*_*ons 12 c# openssl rsacryptoserviceprovider
我已经使用.NET类RSACryptoServiceProvider来获得密钥对:
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
File.WriteAllText ("PublicKeyOnly.xml", rsa.ToXmlString (false));
File.WriteAllText ("PublicPrivate.xml", rsa.ToXmlString (true));
}
Run Code Online (Sandbox Code Playgroud)
现在,我想在openSSH中使用它,但键格式看起来并不相同.有谁知道如何将公钥和私钥转换为openSSH可以使用的文件?
谢谢!
我真的需要实现与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
Run Code Online (Sandbox Code Playgroud)
现在将私钥放入代码中:
Dim cert As New X509Certificate2("certificate.pfx", "", X509KeyStorageFlags.Exportable)
Dim rsaProvider As RSACryptoServiceProvider = DirectCast(cert.PrivateKey, RSACryptoServiceProvider)
Run Code Online (Sandbox Code Playgroud)
如果您需要私钥或公钥,请尝试以下操作:
msgbox(rsaProvider.ToXmlString(True)) 'Private key in XML format
msgbox(rsaProvider.ToXmlString(False)) 'Public key in XML format
Run Code Online (Sandbox Code Playgroud)
要将公钥放入代码中:
Dim cert As New X509Certificate2("certificate.crt")
Dim rsaProvider As RSACryptoServiceProvider = DirectCast(cert.PublicKey.Key, RSACryptoServiceProvider)
Run Code Online (Sandbox Code Playgroud)
如果您需要公钥,请尝试以下方法:
msgbox(rsaProvider.ToXmlString(False)) 'Public key in XML format
Run Code Online (Sandbox Code Playgroud)
更多......
小智 2
这篇关于使用OpenSSL 和 RSACryptoServiceProvider 的博客文章指出这是可能的,但作者最终使用Chilkat RSA库最终在 C# 内与 OpenSSL 进行互操作。.NET 世界不支持 PEM 格式,因此您可以使用 JavaScience 中名为OpenSSLKey.cs的这个库;然而,正如博客文章的作者提到的,他们因此遇到了问题(引用):
OpenSSL:只能对单个块内的小数据进行签名。数据被填充并签名。相反的过程称为“验证”,在这种情况下,数据是“无符号的”,然后取消填充并返回原始数据。
[Windows]:可以签署任意数量的数据。Sign* 方法首先对数据进行哈希处理,然后对哈希值进行填充和签名。verify* 方法需要三个输入:原始数据、哈希算法名称和签名数据。对原始数据进行哈希处理,并将取消签名/取消填充的结果与原始数据的哈希值进行比较。
所以我建议您使用 Chilkat RSA 库。
| 归档时间: |
|
| 查看次数: |
4543 次 |
| 最近记录: |