2012-03-04 24 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

コード内で間違って2つあります。まず、SignDataの計算にはすでにハッシュ計算が含まれています(自分で行う必要はありません)。また、VerifyDataの代わりにVerifyHashを使用しています。

関連する問題