Цифровой знак от SHA1 до SHA256 - PullRequest
2 голосов
/ 18 апреля 2011

Я пытаюсь обновить функцию, которая выполняет цифровую подпись, я хочу перейти с SHA1 SHA256 это текущая функция:

private byte[] zSignData(Byte[] msg, X509Certificate2 signerCert)
{
    ContentInfo contentInfo = new ContentInfo(msg);
    SignedCms signedCms = new SignedCms(contentInfo, false);
    CmsSigner cmsSigner = new CmsSigner(signerCert);

    cmsSigner.DigestAlgorithm = new Oid("1.3.14.3.2.26"); //SHA1

    signedCms.ComputeSignature(cmsSigner, false);

    return signedCms.Encode();
}

эта функция хорошо работает

Чтобы обновить до SHA256, я изменил

cmsSigner.DigestAlgorithm = new Oid("1.3.14.3.2.26"); //SHA1

с

cmsSigner.DigestAlgorithm = new Oid("2.16.840.1.101.3.4.2.1");//SHA256

но на

signedCms.ComputeSignature(cmsSigner, false);

Я получаю следующее исключение

System.Security.Cryptography.CryptographicException Сообщение = Произошла внутренняя ошибка.

У кого-то есть предложение?

Я работаю с VS2010 Professional 64 и win7 professional 64

Ответы [ 2 ]

3 голосов
/ 06 сентября 2012

Я считаю, что в CAPIBase есть ошибка опечатки:

internal const string szOID_OIWSEC_SHA256 = "2.16.840.1.101.3.4.1";
internal const string szOID_OIWSEC_SHA384 = "2.16.840.1.101.3.4.2";
internal const string szOID_OIWSEC_SHA512 = "2.16.840.1.101.3.4.3";

должно быть:

internal const string szOID_OIWSEC_SHA256 = "2.16.840.1.101.3.4.2.1";
internal const string szOID_OIWSEC_SHA384 = "2.16.840.1.101.3.4.2.2";
internal const string szOID_OIWSEC_SHA512 = "2.16.840.1.101.3.4.2.3";

Подробнее об этом можно прочитать здесь:

blogs.msdn.com / b / alejacma / archive / 2012/08/02 / 10018922.aspx

Тодд,с чего вы взяли, что OID 2.16.840.1.101.3.4.2.1 не является SHA256?Какой тогда правильный OID?

0 голосов
/ 16 марта 2012

Вы указываете неправильный OID - это OID для пустых BLOB-объектов со знаком.Для BLOB-объекта со знаком RSA необходимо использовать 1.2.840.113549.1.1.5 sha1RSA.

...