2009-06-19 3 views
0

영어로 죄송합니다.무결성 확인 Ceritifcate {RSACryptoServiceProvider - SHA1 - thumbprint}

약간 문제가 있습니다. 내 인증서의 무결성을 확인하고 싶습니다.

는이 코드합니다

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 "verif는"

+0

다른 사람이 질문을 다시 포맷 할 수 있습니까? 그것을 읽는 것은 무섭다. – AlexDrenea

답변

1

여기에 실제 문제가 없다 이미 "false을"값을 가지고있다. verif의 초기 값을 무조건 무시한다는 것은 맞습니다. 더 중요한 것은, 당신이 검증?

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

나는이 바퀴를 다시 발명하는 것보다 현명한 생각을 할 X509Certificate2를 사용하는 것으로 간주합니다.

편집 : 인증서 체인을 확인하는 경우 X509Chain 및 특히 ChainStatus 속성을 사용한다고 생각합니다.