Статус: Участник
Группы: Участники
Зарегистрирован: 16.12.2014(UTC) Сообщений: 21  Откуда: Москва Сказал(а) «Спасибо»: 1 раз Поблагодарили: 2 раз в 2 постах
|
Добрый день! Стоит задача получить подпись строки. Наличествует некий сертификат с секретным ключом и строка, которую требуется подписать. Код примерно такой:
Код:
public string SignStr(string s){
string res = "";
X509Certificate2 сert = selectCertificate();
if(!сert.HasPrivateKey) throw new Exception("Не найден секретный ключ сертификата!");
if (сert.PrivateKey is Gost3410CryptoServiceProvider)
{
object hashObj = ???;
Gost3410CryptoServiceProvider csp = (Gost3410CryptoServiceProvider)сert.PrivateKey;
res = Convert.ToBase64String(csp.SignData(Encoding.ASCII.GetBytes(s), hashObj));
}
return res;
}
Криптопровайдер получаем из ключа, но в функцию SignData() требуется передать еще криптопровайдер хеширования, т.е. в моем случае объект hashObj предположительно типа Gost3411CryptoServiceProvider. Вопрос: как в общем виде определить алгоритм хеша, поддерживаемого сертификатом, без намертво забитых типов, поскольку сертификаты могут быть разные.
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,433  Откуда: КРИПТО-ПРО Сказал «Спасибо»: 38 раз Поблагодарили: 737 раз в 634 постах
|
в общем случае никак. алгоритм ключа не связан с хэшом. для ГОСТ соответствие однозначное и можно пользоваться CryptFindOidInfo. Но как показывает практика, проще и правильнее захардкодить или предоставить выбор пользователю. |
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close