Отправитель исходного сообщения может использовать любой алгоритм, который ему нравится, для подписания своего сообщения, используя закрытый ключ, соответствующий сертификату.Хотя вы можете получить OID алгоритма, используемого для подписи сертификата , из его свойства SignatureAlgorithm, ничто не мешает отправителю использовать другой алгоритм подписывания или хеширования.* документация , единственными действительными алгоритмами хеширования для провайдера RSA являются SHA1 и MD5.Возможно, вам следует попробовать VerifyHash с обоими алгоритмами и проверить, какой из них успешен.Вы можете получить правильный OID для каждого из них, используя метод CryptoConfig.MapNameToOID , например:
string sha1Oid = CryptoConfig.MapNameToOID("SHA1");
string md5Oid = CryptoConfig.MapNameToOID("MD5");
bool sha1Valid = rsa.VerifyHash(data, sha1Oid, signature);
bool md5Valid = rsa.VerifyHash(data, md5Oid, signature);
valid = sha1Valid || md5Valid;