Статус: Активный участник
Группы: Участники
Зарегистрирован: 17.04.2015(UTC) Сообщений: 31 Откуда: Тирасполь Сказал(а) «Спасибо»: 4 раз Поблагодарили: 2 раз в 2 постах
|
Добрый день, изучая темы данного форума мы пришли к выводу что для подписи большого объёма данных лучше всего использовать не функцию SignCades из CAdESCOM.dll, а функцию SignHash, предварительно вычислив хеш от данных которые требуется подписать. Но при вычислении хеша от большого объёма данных возникает исключение: Цитата:"Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена." Вот код который пытается вычислить хеш значение: Код:
public static CPHashedData GetHesh(string dataToVerify)
{
try
{
byte[] bytes = Encoding.UTF8.GetBytes(dataToVerify);
string base64String = Convert.ToBase64String(bytes);
CPHashedData myHesh = new CPHashedData
{
Algorithm = (CAPICOM_HASH_ALGORITHM)CADESCOM_HASH_ALGORITHM.CADESCOM_HASH_ALGORITHM_CP_GOST_3411,
DataEncoding = CADESCOM_CONTENT_ENCODING_TYPE.CADESCOM_BASE64_TO_BINARY
};
myHesh.Hash(base64String);
return myHesh;
}
catch (Exception)
{
return null;
}
}
У нас возник вопрос, каким образом можно получить хеш от достаточно больших объёмов данных?
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
https://msdn.microsoft.c...us/library/aa382446.aspxЦитата:To create the hash of a large amount of data, call the Hash method for each piece of data. The hash of each piece of data is concatenated to the Value property until the property is read. The contents of the Value property are reset when the property is read. |
|
1 пользователь поблагодарил Анатолий Беляев за этот пост.
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 17.04.2015(UTC) Сообщений: 31 Откуда: Тирасполь Сказал(а) «Спасибо»: 4 раз Поблагодарили: 2 раз в 2 постах
|
Спасибо за ответ, но для тех кто будет искать этот вопрос в дальнейшем хочу немного добавить: Значение хеша будет совпадать только если число передаваемых в блоке байтов кратно 4, так например значение хеша совпадет в следующем примере: Код: CPHashedData myHash1 = new CPHashedData
{
Algorithm = (CAPICOM_HASH_ALGORITHM)CADESCOM_HASH_ALGORITHM.CADESCOM_HASH_ALGORITHM_CP_GOST_3411,
DataEncoding = CADESCOM_CONTENT_ENCODING_TYPE.CADESCOM_BASE64_TO_BINARY
};
myHash1.Hash("AAAABBBB");
CPHashedData myHash2 = new CPHashedData
{
Algorithm = (CAPICOM_HASH_ALGORITHM)CADESCOM_HASH_ALGORITHM.CADESCOM_HASH_ALGORITHM_CP_GOST_3411,
DataEncoding = CADESCOM_CONTENT_ENCODING_TYPE.CADESCOM_BASE64_TO_BINARY
};
myHash2.Hash("AAAA");
myHash2.Hash("BBBB");
Но будет различным если пытаться сделать так: Код: CPHashedData myHash1 = new CPHashedData
{
Algorithm = (CAPICOM_HASH_ALGORITHM)CADESCOM_HASH_ALGORITHM.CADESCOM_HASH_ALGORITHM_CP_GOST_3411,
DataEncoding = CADESCOM_CONTENT_ENCODING_TYPE.CADESCOM_BASE64_TO_BINARY
};
myHash1.Hash("AAABBB");
CPHashedData myHash2 = new CPHashedData
{
Algorithm = (CAPICOM_HASH_ALGORITHM)CADESCOM_HASH_ALGORITHM.CADESCOM_HASH_ALGORITHM_CP_GOST_3411,
DataEncoding = CADESCOM_CONTENT_ENCODING_TYPE.CADESCOM_BASE64_TO_BINARY
};
myHash2.Hash("AAA");
myHash2.Hash("BBB");
В то же время, для совпадения хешей последний блок может содержать произвольное количество символов: Код: CPHashedData myHash1 = new CPHashedData
{
Algorithm = (CAPICOM_HASH_ALGORITHM)CADESCOM_HASH_ALGORITHM.CADESCOM_HASH_ALGORITHM_CP_GOST_3411,
DataEncoding = CADESCOM_CONTENT_ENCODING_TYPE.CADESCOM_BASE64_TO_BINARY
};
myHash1.Hash("AAAABBBB12");
CPHashedData myHash2 = new CPHashedData
{
Algorithm = (CAPICOM_HASH_ALGORITHM)CADESCOM_HASH_ALGORITHM.CADESCOM_HASH_ALGORITHM_CP_GOST_3411,
DataEncoding = CADESCOM_CONTENT_ENCODING_TYPE.CADESCOM_BASE64_TO_BINARY
};
myHash2.Hash("AAAABBBB");
myHash2.Hash("12");
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close