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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline mozartomsk  
#1 Оставлено : 10 апреля 2014 г. 11:42:02(UTC)
mozartomsk

Статус: Новичок

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

У меня имеются две программы, которые высчитывают хэш-код строки и каждый из них считает хэш по разному:
(js обращение к CADES плагину)
Код:

var oHashedData = CreateObject("CAdESCOM.HashedData");
oHashedData.Algorithm = 100; // CADESCOM_HASH_ALGORITHM_CP_GOST_3411
oHashedData.Hash("");
oHashedData.Value
"981E5F3CA30C841487830F84FB433E13AC1101569B9C13584AC483234CD656C0"

var oHashedData = CreateObject("CAdESCOM.HashedData");
oHashedData.Algorithm = 100; // CADESCOM_HASH_ALGORITHM_CP_GOST_3411
oHashedData.Hash("1");
oHashedData.Value
"C650C1D10273FD67B908BD64A24427BAD360570BF053AD07FAC606D6FE3F25B7"


(Java + jcp lib)
Код:

  public static void main(String[] args) throws Exception {
    testDigest("1");
    testDigest("");
  }
  private static void testDigest(String s) throws Exception {
    ByteArrayInputStream stream = new ByteArrayInputStream(s.getBytes());
    MessageDigest digest = java.security.MessageDigest.getInstance("GOST3411");
    DigestInputStream digestStream =
            new DigestInputStream(stream, digest);
    while (digestStream.available() != 0) digestStream.read();
    byte[] resultBytes = digest.digest();
    System.out.println("result hash[" + s + "]: " + Array.toHexString(resultBytes));
  }

Результат:
Код:
result hash[1]: 5E E4 B6 35 3B E6 19 04 73 DB 5D 56 D2 B5 61 C9 61 D0 74 8A 74 CD 55 C4 19 E7 AF 15 57 D1 26 AB
result hash[]: 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


Как видно хэш для пустой строки считается одинаково, но для строки "1" появляется разница, равно как и для любой другой строки, собственно проверка подписи по хэшу у меня проходит, но из-за разницы в расчете самого хэша толку с этого нет.
Подскажите, пожалуйста, почему оно так получается?
Offline Евгений Афанасьев  
#2 Оставлено : 10 апреля 2014 г. 13:23:40(UTC)
Евгений Афанасьев

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

Группы: Участники
Зарегистрирован: 06.12.2008(UTC)
Сообщений: 4,001
Российская Федерация
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 713 раз в 673 постах
Здравствуйте.
Вероятно, отличаются кодировки исходных данных.
Offline Новожилова Елена  
#3 Оставлено : 10 апреля 2014 г. 14:05:10(UTC)
Новожилова Елена

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

Группы: Администраторы, Участники
Зарегистрирован: 10.12.2008(UTC)
Сообщений: 924
Женщина
Откуда: Крипто-Про

Поблагодарили: 99 раз в 95 постах
Для того, чтобы при помощи КриптоПро ЭЦП Browser plug-in вычислить хэш-значение бинарных данных нужно предварительно закодировать их в BASE64 и указать кодировку BASE64_TO_BINARY. Прибегать к BASE64 приходится потому, что у нас нет возможности корректно передавать произвольные бинарные данные из браузера в плагин и обратно. Строки в плагине все передаются в кодировке UTC2 LE
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.