为公钥 RSA 加密 C# .net 创建 .pem 文件

本文关键字:创建 pem 文件 net 公钥 RSA 加密 | 更新日期: 2023-09-27 18:34:48

我想为此方法生成的公钥创建.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);
}

因为我正在为移动应用程序生成此密钥并且他们无法读取它,所以他们请求.pem文件而不是公钥作为字符串

请指教,

为公钥 RSA 加密 C# .net 创建 .pem 文件

最近我需要将 C# 应用程序中生成的PublicKeyPrivateKey保存到文件中,以便稍后使用它。为此,我使用诸如CSharp-easy-RSA-PEM之类的库。

这是一个非常简单快捷的解决方案,所以我会向其他人推荐这个库。

我使用以下代码将PublicKey作为string获取(并将其以Base64格式保存到pem文件中(:

string publicKeyStr = Crypto.ExportPublicKeyToX509PEM(_cryptoServiceProvider);

它返回如下内容:

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCxnBvS8cdsnAev2sRDRYWxznm1
QxZzaypfNXLvK7CDGk8TR7K+Pzsa+tpJfoyN/Z4B6xdlpsERo2Cu6AzolvrDLx5w
ZoI0kgdfaBMbUkdOB1m97zFYjKWoPeTskFzWZ3GHcQ3EXT0NJXXFXAskY45vEpbc
5qFgEhcPy3BMqHRibwIDAQAB
-----END PUBLIC KEY-----

我使用以下代码将PrivateKey string

string privateKeyStr = Crypto.ExportPrivateKeyToRSAPEM(_cryptoServiceProvider);

它返回如下内容:

-----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-----

然后你可以使用

RSACryptoServiceProvider publicX509key = Crypto.DecodeX509PublicKey(publicKeyStr);
RSACryptoServiceProvider privateRSAkey = Crypto.DecodeRsaPrivateKey(privateKeyStr);

将保存的密钥恢复回RSACryptoServiceProvider

因此,如果有人需要解决类似的问题,您只需下载此库,转到Visual Studio中的Solution Explorer -> (Right click on your project) -> Add -> Reference -> Overview以将此库添加到项目中,然后在需要的地方添加using CSharp_easy_RSA_PEM;:)

首先,所谓的.pem文件并不是一个固定的规范或格式。几种不同类型的不同文件格式通常被描述为"PEM"文件。当SSLeay(现在的OpenSSL(项目需要生成包含关键信息的base64编码输出文件时,他们从旧的隐私增强邮件RFC 1421-1424中借用了格式概念,并将扩展.pem添加到这些文件的末尾。但此类文件可能包含公钥、私钥、证书请求、证书、证书列表等。每个都是不同的。因此,如果您被告知只是生成一个.pem文件,那么您将不得不猜测真正需要什么。

编写此类文件的最简单方法是使用 Bouncycastle C# 库。包Org.BouncyCastle.OpenSsl包含许多实用程序,包括一个可以帮助您的PemWriter类。