2009-06-19 7 views
0

извините за мой английский.Проверка целостности Ceritifcate {RSACryptoServiceProvider - SHA1 - отпечаток пальца}

У меня есть небольшая проблема. Я хочу проверить целостность моего сертификата.

я сделать этот код:

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

, но я уже значение «false» для переменной «verif»

+0

может кто-то пожалуйста переформатировать вопрос. Это ужасно трудно прочитать. – AlexDrenea

ответ

1

Там нет никакого фактического вопрос здесь. Вы правы, что безоговорочно игнорируете начальное значение verif. Что еще более важно, вы рассмотрели с помощью X509Certificate2 сделать верификацию ?:

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

Я думаю, что это мудрее заново изобретать колесо.

EDIT: Если вы проверяете цепочку сертификатов, я считаю, что вы хотите использовать X509Chain и, в частности, ChainStatus.