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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline fomenko  
#1 Оставлено : 22 июля 2013 г. 17:23:21(UTC)
fomenko

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

Группы: Участники
Зарегистрирован: 16.07.2013(UTC)
Сообщений: 35
Российская Федерация
Откуда: Пермь

Сказал(а) «Спасибо»: 9 раз
Считаю хэш от одинх и тех же данных на C# и Javascript

Данные:
в xml
<test></test>

в hex
EE46FB595BFF12F5F62EC578A94D33EBF0C38CB02959A6BC5EA30BF8E5E12C00


C# код по расчету хэша


MemoryStream memoryStream=new MemoryStream();
using (FileStream file = new FileStream(@"c:\temp\new_sign.txt", FileMode.Open, FileAccess.Read))
{
byte[] bytes = new byte[file.Length];
file.Read(bytes, 0, (int)file.Length);
memoryStream.Write(bytes, 0, (int)file.Length);
}
byte[] test2 =memoryStream.ToArray();
HashAlgorithm myhash = HashAlgorithm.Create("GOST3411");
byte[] hashResult = myhash.ComputeHash(test2);
return BitConverter.ToString(hashResult).Replace("-", "");

Получаю значение:
EE46FB595BFF12F5F62EC578A94D33EBF0C38CB02959A6BC5EA30BF8E5E12C00

Считаю на клиенте с помощь Javascript от тех же данных:
Код:
    
        var hashObject = CreateObject("CAdESCOM.HashedData");
        hashObject.Algorithm = CADESCOM_HASH_ALGORITHM_CP_GOST_3411;
        hashObject.Hash(hexData);
        var result = hashObject.Value;

Получаю
75ABFA78D392AA40470AE5C6DEA8F4E8E9CE10B768E8E2F495ADEB83EFBEBD18

Из-за чего может быть такое расхождение результатов?

Отредактировано пользователем 22 июля 2013 г. 17:30:47(UTC)  | Причина: Не указана

Offline dmishin  
#2 Оставлено : 23 июля 2013 г. 6:17:00(UTC)
dmishin

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

Группы: Участники
Зарегистрирован: 07.08.2012(UTC)
Сообщений: 123

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 6 раз в 6 постах
Проверьте вначале взяв хеш от пустой строки:

base64: mB5fPKMMhBSHgw+E+0M+E6wRAVabnBNYSsSDI0zWVsA=
hex: 98 1e 5f 3c a3 0c 84 14 87 83 0f 84 fb 43 3e 13 ac 11 01 56 9b 9c 13 58 4a c4 83 23 4c d6 56 c0
Offline fomenko  
#3 Оставлено : 23 июля 2013 г. 9:48:01(UTC)
fomenko

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

Группы: Участники
Зарегистрирован: 16.07.2013(UTC)
Сообщений: 35
Российская Федерация
Откуда: Пермь

Сказал(а) «Спасибо»: 9 раз
Проверил. Сервеный хэш и Base64 совпадают, клинетский хэш тоже совпадает, но клиентское base64.encode выдает не то значение.
Offline dmishin  
#4 Оставлено : 23 июля 2013 г. 10:16:50(UTC)
dmishin

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

Группы: Участники
Зарегистрирован: 07.08.2012(UTC)
Сообщений: 123

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 6 раз в 6 постах
Как я уже говорил - проверьте base64 библиотеку.

П.С. Base64 случайно не от HEX берете?

Отредактировано пользователем 23 июля 2013 г. 10:18:57(UTC)  | Причина: Не указана

Offline fomenko  
#5 Оставлено : 23 июля 2013 г. 10:25:56(UTC)
fomenko

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

Группы: Участники
Зарегистрирован: 16.07.2013(UTC)
Сообщений: 35
Российская Федерация
Откуда: Пермь

Сказал(а) «Спасибо»: 9 раз
брал от hex. для пустой строки поставил перед base64.encode вызов utils.hexToString вернуло корректное значение

dmishin, подскажите пожалуйста, после получения значения
var signatureHex = rawSignature.SignHash(hashObject, certificate);
какая последовательность операций правильная для следующих действий:
reverse, hexToString, base64.encode?


пытаюсь брать хэш на клиенте от hex представления данных(как я понимаю, именно от hex он и должен браться).
пример исходных данных 3C746573743E3C2F746573743E
однако клиентский хэш не сходится с серверным. если брать от пустой строки, то хэши совпадают. в чем может быть ошибка?

Отредактировано пользователем 23 июля 2013 г. 10:51:31(UTC)  | Причина: Не указана

Offline fomenko  
#6 Оставлено : 23 июля 2013 г. 11:29:09(UTC)
fomenko

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

Группы: Участники
Зарегистрирован: 16.07.2013(UTC)
Сообщений: 35
Российская Федерация
Откуда: Пермь

Сказал(а) «Спасибо»: 9 раз
Цитата:

пытаюсь брать хэш на клиенте от hex представления данных(как я понимаю, именно от hex он и должен браться).
пример исходных данных 3C746573743E3C2F746573743E
однако клиентский хэш не сходится с серверным. если брать от пустой строки, то хэши совпадают. в чем может быть ошибка?

Помогло передавать данные для хэширования кодированные в base64 и выставить при этом у на клиенте флаг hashObject.DataEncoding = CADESCOM_BASE64_TO_BINARY;
После этого хэши стали совпадать. Остается актуальным вопрос насчет порядка вызова операций
reverse, hexToString, base64.encode для signatureHex
Offline dmishin  
#7 Оставлено : 23 июля 2013 г. 11:38:03(UTC)
dmishin

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

Группы: Участники
Зарегистрирован: 07.08.2012(UTC)
Сообщений: 123

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 6 раз в 6 постах
thanks 1 пользователь поблагодарил dmishin за этот пост.
fomenko оставлено 23.07.2013(UTC)
Offline fomenko  
#8 Оставлено : 23 июля 2013 г. 11:43:57(UTC)
fomenko

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

Группы: Участники
Зарегистрирован: 16.07.2013(UTC)
Сообщений: 35
Российская Федерация
Откуда: Пермь

Сказал(а) «Спасибо»: 9 раз
Ура. Получилось.
Правильный порядок utils.reverse(utils.hexToString(signatureHex))
dmishin, спасибо огромное!!! без вас бы ничего не вышло.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (3)
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.