Не удается проверить подпись с X509Certificate2 - PullRequest
0 голосов
/ 05 марта 2012

Я пытаюсь использовать самозаверяющий сертификат, чтобы подписать строку, а затем убедиться, что строка подписана правильно.

Вот как я создаю самозаверяющий сертификат:

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

И все же я всегда получаю результат как ложный.Я уверен, что мне здесь чего-то не хватает.Любая идея, что происходит или как я могу отладить проблему?

спасибо,

1 Ответ

3 голосов
/ 05 марта 2012

В коде есть две ошибки.Во-первых, вычисление SignData уже включает вычисление хэша (нет необходимости делать это самостоятельно), а во-вторых, вы используете VerifyHash вместо VerifyData.

...