Форум КриптоПро
»
Средства криптографической защиты информации
»
Встраивание
»
Помогите правильно сформировать хэш-вектор файла с помощью CryptoAPI
Статус: Новичок
Группы: Участники
Зарегистрирован: 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;
Мой хэш: 79AE8B68A3FF425F3447280ECEC955CE15C7AA52884DDB7152284FC0ABEEFE22calchash.com: Файл 00D0U841.doc, длина: 2249, дата: 2009/12/11, время: 16:30:32. Хэш-вектор файла: A97599ED9907FFDDE70807A09F421C382B72D20044D2C15CE5BF145C5C2E02C6
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 16.12.2009(UTC) Сообщений: 4 Откуда: Москва
|
параметр функции Hash ABlockSize: DWORD нужно убрать - забыл вырезать.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 29.12.2007(UTC) Сообщений: 348 Откуда: ООО "Крипто-Про"
|
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 16.12.2009(UTC) Сообщений: 4 Откуда: Москва
|
Писинин Алексей написал:Утилита calchash.com не является разработкой Крипто-Про. Да, Вы правы - это утилита к вашей компании не имеет отношения. Извиняюсь. И все-таки, подскажите, как мне проверить соответствие хэш-вектора файла ГОСТу?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 29.12.2007(UTC) Сообщений: 348 Откуда: ООО "Крипто-Про"
|
Можно воспользоваться утилитой cpverify.exe, которая входит в состав КриптоПро CSP.
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 16.12.2009(UTC) Сообщений: 4 Откуда: Москва
|
Проверил - не совпадает. Но ошибку нашел. Байты переворачивал при выводе в BinaryToHex
cpverify.exe -mk 1.txt: 6D094512C85522EE5F093F6A28C689BF34FEA987DC69BF35A2A4BB35E5130EB1
код в первом посте: D69054218C5522EEF590F3A6826C98FB43EF9A78CD96FB532A4ABB535E31E01B
Проблема решена. Теперь буду пробовать читать большие файлы блоками и потом сравнивать хэш.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 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)
| Причина: Не указана
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 30.10.2008(UTC) Сообщений: 54 Откуда: Kurgan
Сказал(а) «Спасибо»: 7 раз
|
Check.exe из пакета "Верба OW 6.1.2.27" выдает такой же результат как КриптоАРМ (отличный от cpverify.exe)
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.12.2007(UTC) Сообщений: 390 Откуда: КриптоПро Поблагодарили: 2 раз в 2 постах
|
|
С уважением, Александр. |
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 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 я не вижу такого референса. Что нужно установить, чтобы стали доступны и этот компонент и алгоритмы хеширования по ГОСТ. Спасибо.
|
|
|
|
Форум КриптоПро
»
Средства криптографической защиты информации
»
Встраивание
»
Помогите правильно сформировать хэш-вектор файла с помощью CryptoAPI
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close