Yas*_*rag 5 c# encryption rsa encryption-asymmetric public-key-encryption
我想.pem为此方法生成的公钥创建文件
public static Tuple<string, string> CreateKeyPair()
{
CspParameters cspParams =
new CspParameters {
ProviderType = 1 /* PROV_RSA_FULL */
};
RSACryptoServiceProvider rsaProvider =
new RSACryptoServiceProvider(1024, cspParams);
string publicKey = Convert.ToBase64String(rsaProvider.ExportCspBlob(false));
string privateKey = Convert.ToBase64String(rsaProvider.ExportCspBlob(true));
return new Tuple<string, string>(privateKey, publicKey);
}
Run Code Online (Sandbox Code Playgroud)
因为我为移动应用程序生成了这个密钥而他们无法读取它,所以他们请求.pem文件而不是公钥作为字符串
请指教,
最近我需要在我的C#应用程序中保存PublicKey并PrivateKey生成文件,并在以后使用它.我为此目的使用像CSharp-easy-RSA-PEM这样的库.
这是非常简单快速的解决方案,所以我会向其他人推荐这个库.
我用下面的代码获取PublicKey的string(并保存它pem在格式文件Base64):
string publicKeyStr = Crypto.ExportPublicKeyToX509PEM(_cryptoServiceProvider);
Run Code Online (Sandbox Code Playgroud)
它返回这样的东西:
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCxnBvS8cdsnAev2sRDRYWxznm1
QxZzaypfNXLvK7CDGk8TR7K+Pzsa+tpJfoyN/Z4B6xdlpsERo2Cu6AzolvrDLx5w
ZoI0kgdfaBMbUkdOB1m97zFYjKWoPeTskFzWZ3GHcQ3EXT0NJXXFXAskY45vEpbc
5qFgEhcPy3BMqHRibwIDAQAB
-----END PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)
我用下面的代码获取PrivateKey为string:
string privateKeyStr = Crypto.ExportPrivateKeyToRSAPEM(_cryptoServiceProvider);
Run Code Online (Sandbox Code Playgroud)
它返回这样的东西:
-----BEGIN RSA PRIVATE KEY-----
MIICWwIBAAKBgQCxnBvS8cdsnAev2sRDRYWxznm1QxZzaypfNXLvK7CDGk8TR7K+
Pzsa+tpJfoyN/Z4B6xdlpsERo2Cu6AzolvrDLx5wZoI0kgdfaBMbUkdOB1m97zFY
jKWoPeTskFzWZ3GHcQ3EXT0NJXXFXAskY45vEpbc5qFgEhcPy3BMqHRibwIDAQAB
AoGAAdwpqm7fxh0S3jOYpJULeQ45gL11dGX7Pp4CWHYzq1vQ14SDtFxYfnLWwGLz
499zvSoSHP1pvjPgz6lxy9Rw8dUxCgvh8VQydMQzaug2XD1tkmtcSWInwFKBAfQ7
rceleyD0aK8JHJiuzM1p+yIJ/ImGK0Zk2U/svqrdJrNR4EkCQQDo3d5iWcjd3OLD
38k1GALEuN17KNpJqLvJcIEJl0pcHtOiNnyy2MR/XUghDpuxwhrhudB/TvX4tuI0
MUeVo5fjAkEAw0D6m9jkwE5uuEYN/l/84rbQ79p2I7r5Sk6zbMyBOvgl6CDlJyxY
434DDm6XW7c55ALrnlratEW5HPiPxuHZBQJANnE4vtGy7nvn4Fd/mRQmAYwe695f
On1iefP9lxpx3huu6uvGN6IKPqS2alQZ/nMdCc0Be+IgC6fmNsGWtNtsdQJAJvB4
ikgxJqD9t8ZQ2CAwgM5Q0OTSlsGdIdKcOeB3DVmbxbV5vdw8RfJFjcVEbkgWRYDH
mKcp4rXc+wgfNFyqOQJATZ1I5ER8AZAn5JMMH9zK+6oFvhLUgKyWO18W+dbcFrBd
AzlTB+HHYEIyTmaDtXWAwgBvJNIHk4BbM1meCH4QnA==
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)
然后你可以使用
RSACryptoServiceProvider publicX509key = Crypto.DecodeX509PublicKey(publicKeyStr);
RSACryptoServiceProvider privateRSAkey = Crypto.DecodeRsaPrivateKey(privateKeyStr);
Run Code Online (Sandbox Code Playgroud)
将已保存的密钥恢复为RSACryptoServiceProvider.
因此,如果有人需要解决类似的问题,你可以下载这个库,请Solution Explorer -> (Right click on your project) -> Add -> Reference -> Overview您Visual Studio在您的项目中添加该库,并添加using CSharp_easy_RSA_PEM;你需要它:)
首先,所谓的.pem文件并不是一个固定的规范或格式.几种不同类型的不同文件格式通常被描述为"PEM"文件.当SSLeay的(现在的OpenSSL)项目所需生产含有它们借鉴了老保密增强邮件的RFC格式化概念的关键信息base64编码的输出文件1421 -1424它们添加扩展.pem到这些文件的末尾.但是这样的文件可能包含公钥,私钥,证书请求,证书,证书列表等.每个都不同.因此,如果您被告知要生成一个.pem文件,那么您将不得不猜测真正需要的是什么.
编写此类文件的最简单方法是使用Bouncycastle C#库.该软件包Org.BouncyCastle.OpenSsl包含许多实用程序,包括一个PemWriter可以帮助您的类.