Проверить цифровую подпись с помощью SignedCms - PullRequest
0 голосов
/ 28 сентября 2011

Я получаю CryptographicException «Хеш-значение неверно». Я попытался verifyCms.CheckSignature (true); (та же ошибка) Я пытался добавить в ContentInfo всю почту (Отправитель, Тема, Тело, Раздел HTML ...) (та же ошибка)

public static bool Verify(byte[] signature, X509Certificate2 certificate)
{
       X509Certificate2 cert=new X509Certificate2(@"D:\Work\Digital Signature\smime.p7s");
   certificate = cert;

    if(signature == null)
        throw new ArgumentNullException("signature");
    if(certificate == null)
        throw new ArgumentNullException("certificate");

    //the text from the body of the mail    
    string text = "FINAL TEST SIGNED";
    //hash the text 
     // Methode 3 for Hashing
            System.Security.Cryptography.SHA1 hash3 = System.Security.Cryptography.SHA1.Create();
            System.Text.UnicodeEncoding encoder = new System.Text.UnicodeEncoding();
            byte[] combined = encoder.GetBytes(text);
            byte[] hash3byte = hash3.ComputeHash(combined);

    //Adding the text from the email, to a contentInfo 
      ContentInfo content = new ContentInfo(hash3byte);

    // decode the signature
    SignedCms verifyCms = new SignedCms(content,true);
    verifyCms.Decode(signature);

    // verify it
    try
    {
        verifyCms.CheckSignature(new X509Certificate2Collection(certificate), false);
        return true;
    }
    catch(CryptographicException)
    {
        return false;
    }
} 

Где проблема?

1 Ответ

0 голосов
/ 21 декабря 2011

Вы можете см. Мой пост .

Просто замените Oid 'SHA1' на нужный вам алгоритм.

...