Ryo*_*nzo 5 c# ssl sha256 x509certificate2 ecdsa
我曾经OpenSSL使用SHA256. 现在我想使用这些证书来签署数据并验证现有的签名。
我尝试使用DSACryptoServiceProvider,但它只支持SHA1或MD5。
不过好像ECDsaCng是可以支持的ECDSA-with-SHA256。我唯一的问题是我不知道如何将私钥和公钥从 myX509Certificate2转换为必要的CngKey. 我读了另一个问题,有人描述了如何转换公钥。但是为了能够对数据进行签名,我也需要私钥。
那么有没有办法CngKey从X509Certificate2. 证书有不同的格式。我将它们作为 PFX 文件,并分别作为 CER 和 PEM 文件。
我更愿意坚持使用.NET Framework 4,但如果根本不可能使用它,我也会切换到Bouncy Castle.
.NET 4.6.1 中添加了对此的支持:
private static byte[] SignWithCert(X509Certificate2 cert, byte[] data)
{
using (ECDsa ecdsa = cert.GetECDsaPrivateKey())
{
if (ecdsa == null)
throw new ArgumentException("Cert must have an ECDSA private key", nameof(cert));
return ecdsa.SignData(data, HashAlgorithmName.SHA256);
}
}
private static bool VerifyWithCert(X509Certificate2 cert, byte[] data, byte[] signature)
{
using (ECDsa ecdsa = cert.GetECDsaPublicKey())
{
if (ecdsa == null)
throw new ArgumentException("Cert must be an ECDSA cert", nameof(cert));
return ecdsa.VerifyData(data, signature, HashAlgorithmName.SHA256);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1848 次 |
| 最近记录: |