Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline florentii  
#1 Оставлено : 30 ноября 2016 г. 14:40:24(UTC)
florentii

Статус: Активный участник

Группы: Участники
Зарегистрирован: 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;
            }
        }


У нас возник вопрос, каким образом можно получить хеш от достаточно больших объёмов данных?
Offline cross  
#2 Оставлено : 12 декабря 2016 г. 13:03:52(UTC)
Анатолий Беляев

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 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.
Техническую поддержку оказываем тут.
Наша база знаний.
Наша страничка в Instagram.
thanks 1 пользователь поблагодарил Анатолий Беляев за этот пост.
florentii оставлено 16.12.2016(UTC)
Offline florentii  
#3 Оставлено : 16 декабря 2016 г. 11:19:54(UTC)
florentii

Статус: Активный участник

Группы: Участники
Зарегистрирован: 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");


RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.