goo*_*ate 5 c# rsa certificate pem
是否可以生成RSA密钥对,将其导出为与DKIM的类似PEM格式兼容的ASN1 格式,仅使用C#?
我想减少对第三方的依赖,但这里有一些我发现的
充气城堡
密码学应用程序块
Win32 PFXImportCertStore
导入PEM
微软的CLR安全增强功能
微软CNG
以下是在Codeplex上使用.NET dll的Microsoft CNG提供程序的代码(上图)...但是我不知道如何以DKIM兼容的ASN1格式导出和导入公钥和私钥.
byte[] pkcs8PrivateKey = null;
byte[] signedData = null;
CngKey key = CngKey.Create(CngAlgorithm2.Rsa);
byte[] exportedPrivateBytes = key.Export(CngKeyBlobFormat.GenericPrivateBlob);
string exportedPrivateString= Encoding.UTF8.GetString(exportedPrivateBytes);
pkcs8PrivateKey = Encoding.UTF8.GetBytes(exportedPrivateString);
using (CngKey signingKey = CngKey.Import(pkcs8PrivateKey, CngKeyBlobFormat.Pkcs8PrivateBlob))
{
using (RSACng rsa = new RSACng(signingKey))
{
rsa.SignatureHashAlgorithm = CngAlgorithm.Sha1;
signedData = rsa.SignData(dataToSign);
}
}
Run Code Online (Sandbox Code Playgroud)
题
是否有任何使用Microsoft库(Codeplex上的Win32,PFX或CLR)的直接示例,说明如何创建密钥对并以PEM格式导出/导入这些值?
所以你只需要一个 pkcs8 密钥。
CngKeyCreationParameters ckcParams = new CngKeyCreationParameters()
{
ExportPolicy = CngExportPolicies.AllowPlaintextExport,
KeyCreationOptions = CngKeyCreationOptions.None,
KeyUsage = CngKeyUsages.AllUsages,
};
ckcParams.Parameters.Add(new CngProperty("Length", BitConverter.GetBytes(2048), CngPropertyOptions.None));
myCngKey = CngKey.Create(CngAlgorithm.Rsa, null, ckcParams);
byte[] privatePlainTextBlob = myCngKey.Export(CngKeyBlobFormat.Pkcs8PrivateBlob);
Console.WriteLine(Convert.ToBase64String(privatePlainTextBlob));
}
Run Code Online (Sandbox Code Playgroud)
现在您的密钥对包含在 PKCS#8 ASN.1 编码字符串中。
| 归档时间: |
|
| 查看次数: |
4400 次 |
| 最近记录: |