验证完整性证书{RSACryptoServiceProvider - SHA1 - thumbprint}

时间:2009-06-19 09:12:35

标签: c# certificate sha1 verify rsacryptoserviceprovider

抱歉我的英语。

我有点问题。我想验证我的证书的完整性。

我制作了这段代码:

using System.Security.Cryptography;
using System.Runtime.InteropServices;
using System.Security.Cryptography.X509Certificates; 

SHA1Managed sha1 = new SHA1Managed();
RSACryptoServiceProvider csp = null;
AsymmetricAlgorithm rsaAlgo = certificatEnCours.PublicKey.Key;
byte[] data = null;
byte[] hash = null;

string keyPublic = "";
string signatureNumérique = "";

bool verif = false;

// ------------- PART 1 -------------

signatureNumérique = certificatEnCours.Thumbprint;

data = Convert.FromBase64String(signatureNumérique);

// ------------- PART 2 -------------

hash = sha1.ComputeHash(certificatEnCours.RawData);

keyPublic = rsaAlgo.ToXmlString(false);

csp = new RSACryptoServiceProvider();

csp.FromXmlString(keyPublic);

// ------------------------------

verif = csp.VerifyData(hash, CryptoConfig.MapNameToOID("SHA1"), data);

但我已经为var“false

评估了“verif

1 个答案:

答案 0 :(得分:1)

这里没有实际问题。你无条件地忽略了verif的初始值,你是对的。更重要的是,您是否考虑过使用X509Certificate2进行验证?:

X509Certificate2 x2 = new X509Certificate2(certificatEnCours);
bool verif = x2.Verify();

我认为这比重新发明轮子更明智。

编辑:如果您要验证一系列证书,我相信您要使用X509Chain 特别是ChainStatus属性。