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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline Phoenix323f  
#1 Оставлено : 16 декабря 2009 г. 19:00:51(UTC)
Phoenix323f

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

Группы: Участники
Зарегистрирован: 16.12.2009(UTC)
Сообщений: 4
Откуда: Москва

Для проверки правильного хэш-вектора файла использую вашу утилиту calchash.com, но ее хэш-вектор отличается от моего (длины хзш совпадают), полученного с помощью кода ниже. Не могу понять в чем ошибка. Помогите разобраться...

Код:

.....
uses wcrypt2, wincryptex;
.....

function BinaryToHex( const sStr : String ) : String;
const
  Convert: array[0..15] of Char = '0123456789ABCDEF';
var
  ii : Integer;
begin
  SetLength( Result, Length( sStr ) * 2 );
  for ii := 1 to Length( sStr ) do
  begin
    Result[ ii * 2 - 1 ] := Convert[ Byte( sStr[ ii ]) shr 4 ];
    Result[ ii * 2 ] := Convert[ Byte( sStr[ ii ]) and 15 ];
  end;
end;

//Функция получения хэш-вектора файла.

function Hash(FileName: string; AHashAlg, ABlockSize: DWORD ): AnsiString;
var
  hHash : HCRYPTHASH;
  hProvider : HCRYPTPROV;
  dwHashSize, dwSize : DWORD;
  AStream: TMemoryStream;
begin
  Win32Check(CryptAcquireContext(@hProvider, nil, PChar(CP_GR3410_2001_PROV_A),
    PROV_GOST_2001_DH, CRYPT_VERIFYCONTEXT));
  try
    AStream := TMemoryStream.Create;
    AStream.LoadFromFile(FileName);
    Win32Check( CryptCreateHash(hProvider, AHashAlg, 0, 0, @hHash));
    try
      Win32Check(CryptHashData( hHash, AStream.Memory, AStream.Size, 0));

      dwSize := SizeOf( dwHashSize );
      Win32Check( CryptGetHashParam( hHash, HP_HASHSIZE, @dwHashSize, @dwSize, 0 ));
      SetLength( Result, dwHashSize );
      Win32Check( CryptGetHashParam( hHash, HP_HASHVAL, @Result[1], @dwHashSize, 0));
    finally
      Win32Check(CryptDestroyHash(hHash));
    end;
  finally
    Win32Check( CryptReleaseContext(hProvider, 0));
    AStream.Free;
  end;
end;

procedure TForm1.BitBtn4Click(Sender: TObject);
var
  sHash: string;
begin
  sHash := BinaryToHex(Hash('C:\1\00D0U841.doc', CALG_GR3411));
  ShowMessage(sHash);
end;


Мой хэш:
79AE8B68A3FF425F3447280ECEC955CE15C7AA52884DDB7152284FC0ABEEFE22

calchash.com:
Файл 00D0U841.doc, длина: 2249, дата: 2009/12/11, время: 16:30:32.
Хэш-вектор файла:
A97599ED9907FFDDE70807A09F421C382B72D20044D2C15CE5BF145C5C2E02C6
Offline Phoenix323f  
#2 Оставлено : 16 декабря 2009 г. 19:11:08(UTC)
Phoenix323f

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

Группы: Участники
Зарегистрирован: 16.12.2009(UTC)
Сообщений: 4
Откуда: Москва

параметр функции Hash ABlockSize: DWORD нужно убрать - забыл вырезать.
Offline Писинин Алексей  
#3 Оставлено : 16 декабря 2009 г. 21:29:29(UTC)
Писинин Алексей

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

Группы: Участники
Зарегистрирован: 29.12.2007(UTC)
Сообщений: 348
Мужчина
Откуда: ООО "Крипто-Про"

Утилита calchash.com не является разработкой Крипто-Про.

Отредактировано пользователем 16 декабря 2009 г. 21:30:11(UTC)  | Причина: Не указана

Offline Phoenix323f  
#4 Оставлено : 16 декабря 2009 г. 21:38:09(UTC)
Phoenix323f

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

Группы: Участники
Зарегистрирован: 16.12.2009(UTC)
Сообщений: 4
Откуда: Москва

Писинин Алексей написал:
Утилита calchash.com не является разработкой Крипто-Про.

Да, Вы правы - это утилита к вашей компании не имеет отношения. Извиняюсь.
И все-таки, подскажите, как мне проверить соответствие хэш-вектора файла ГОСТу?
Offline Писинин Алексей  
#5 Оставлено : 16 декабря 2009 г. 21:47:28(UTC)
Писинин Алексей

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

Группы: Участники
Зарегистрирован: 29.12.2007(UTC)
Сообщений: 348
Мужчина
Откуда: ООО "Крипто-Про"

Можно воспользоваться утилитой cpverify.exe, которая входит в состав КриптоПро CSP.
Offline Phoenix323f  
#6 Оставлено : 16 декабря 2009 г. 22:08:23(UTC)
Phoenix323f

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

Группы: Участники
Зарегистрирован: 16.12.2009(UTC)
Сообщений: 4
Откуда: Москва

Проверил - не совпадает. Но ошибку нашел. Байты переворачивал при выводе в BinaryToHex

cpverify.exe -mk 1.txt:
6D094512C85522EE5F093F6A28C689BF34FEA987DC69BF35A2A4BB35E5130EB1

код в первом посте:
D69054218C5522EEF590F3A6826C98FB43EF9A78CD96FB532A4ABB535E31E01B

Проблема решена. Теперь буду пробовать читать большие файлы блоками и потом сравнивать хэш.
Offline sany  
#7 Оставлено : 18 апреля 2010 г. 14:59:49(UTC)
sany

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

Группы: Участники
Зарегистрирован: 30.10.2008(UTC)
Сообщений: 54
Откуда: Kurgan

Сказал(а) «Спасибо»: 7 раз
Пожалуйста, подскажите, почему при автоматизации КриптоАРМ метод HashFile объекта DigtCryptoLib.HashedData выдает результат отличный от cpverify.exe?
Отличие в перевернутых полубайтах, как описано выше.

А например, программа gostsum криптокома не переворачивает полубайты, но переставляет местами все байты в строке результата (задом наперед).

Результат какой программы соответствует ГОСТ Р 34.11-94? Или ГОСТ не регламентирует формат вывода результата ?

Программы для вычисления зарубежных хэш кодов (md5, sha1, sha2, и т.п.), всегда выдают одинаковые результаты.

Пример кода для КриптоАРМ:

Const FN = "L:\test2.txt"
Dim CryptoARM: Set CryptoARM = New DigtCryptoLib.HashedData
CryptoARM.Algorithm = "1.2.643.2.2.9"
CryptoARM.ProviderName = "Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider"
CryptoARM.HashFile (FN)
Debug.Print (Left(CryptoARM.ProviderName, 20) & ": " & CryptoARM.Value(DigtCryptoLib.Format.HEX_TYPE))

Отредактировано пользователем 18 апреля 2010 г. 15:03:43(UTC)  | Причина: Не указана

Offline sany  
#8 Оставлено : 19 апреля 2010 г. 10:42:37(UTC)
sany

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

Группы: Участники
Зарегистрирован: 30.10.2008(UTC)
Сообщений: 54
Откуда: Kurgan

Сказал(а) «Спасибо»: 7 раз
Check.exe из пакета "Верба OW 6.1.2.27" выдает такой же результат как КриптоАРМ (отличный от cpverify.exe)
Offline Челпанов А.  
#9 Оставлено : 19 апреля 2010 г. 17:42:46(UTC)
Челпанов А.

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

Группы: Участники
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 390
Мужчина
Откуда: КриптоПро

Поблагодарили: 2 раз в 2 постах
В cpverify неправильно.

Отредактировано пользователем 9 июня 2010 г. 18:02:49(UTC)  | Причина: Не указана

С уважением, Александр.
Offline Gar777  
#10 Оставлено : 18 мая 2010 г. 15:04:37(UTC)
Gar777

Статус: Участник

Группы: Участники
Зарегистрирован: 18.05.2010(UTC)
Сообщений: 11
Откуда: Москва

sany написал:
Const FN = "L:\test2.txt"
Dim CryptoARM: Set CryptoARM = New DigtCryptoLib.HashedData
CryptoARM.Algorithm = "1.2.643.2.2.9"
CryptoARM.ProviderName = "Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider"
CryptoARM.HashFile (FN)
Debug.Print (Left(CryptoARM.ProviderName, 20) & ": " & CryptoARM.Value(DigtCryptoLib.Format.HEX_TYPE))


Здравствуйте, не могли бы вы помочь по следующему вопросу.
Подскажите, что за компонент DigtCryptoLib.
Из проекта VB я не вижу такого референса.
Что нужно установить, чтобы стали доступны и этот компонент и алгоритмы хеширования по ГОСТ.

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