2012-03-04 2 views
0

자체 서명 된 인증서를 사용하여 문자열에 서명하고 문자열이 올바르게 서명되었는지 확인하려고합니다. 이 후X509Certificate2로 서명을 확인할 수 없습니다

makecert -r -n "CN=AuthCert2" -ss my -a sha1 -pe 

내가 PFX 파일로 인증서를 내 보낸 다음 코드를 실행하려고 : 나는 항상 생각하지만

using System; 
using System.Text; 
using Microsoft.VisualStudio.TestTools.UnitTesting; 
using System.Security.Cryptography.X509Certificates; 
using System.Security.Cryptography; 
using System.Net; 
using System.Net.Security; 

[TestClass] 
public class TestSign 
{ 

     [TestMethod] 
     public void TestSignAndVerify() 
     { 
      string toSignString = "This is my string to sign"; 

      byte[] data = UnicodeEncoding.UTF8.GetBytes(toSignString); 

      SHA1Managed sha1 = new SHA1Managed(); 
      byte[] hash = sha1.ComputeHash(data); 

      X509Certificate2 signCert = new X509Certificate2("authcert2.pfx", "authpass"); 
      var csp = (RSACryptoServiceProvider)signCert.PrivateKey; 

      byte[] signedData = csp.SignData(hash, CryptoConfig.MapNameToOID("SHA1")); 

      RSACryptoServiceProvider csp2 = (RSACryptoServiceProvider)signCert.PublicKey.Key; 

      bool result = csp2.VerifyHash(hash, CryptoConfig.MapNameToOID("SHA1"), signedData); 
     } 
} 

이것은 내 자체 서명 인증서를 생성하는 방법이다 결과를 false로 가져옵니다. 나는 여기서 아주 기본적인 것을 놓치고 있다고 확신한다. 어떤 일이 벌어지고 있는지, 어떻게 문제를 디버깅 할 수 있습니까?

감사합니다.

답변

3

코드 내에 두 가지 문제가 있습니다. 우선, SignData 계산에는 이미 해시 계산이 포함되어 있으며 (직접 할 필요 없음) 두 번째는 VerifyData 대신 VerifyHash을 사용하고 있다는 것입니다.

관련 문제