12.08.2005 19:07:24подсчет дайжеста Ответов: 5
Ирина
Не подскажите, почему при подсчете дайжеста у одного и того же документа, получаются разные результаты? Ведь они должны совпадать?
 
Ответы:
15.08.2005 9:51:17Kirill Sobolev
Должны
Но если при подсчете используется MAC алгоритм (хэш считается в зависимости от ключа), то это нормально, если ключи разные.
15.08.2005 11:55:02Ирина
Тогда у меня вообще зациклилась проблема.

1. Я сначала генерю провайдер без указания контейнера.
CryptAcquireContext(@hProv, nil, ProvName, FProvider, CRYPT_VERIFYCONTEXT)

2. Потом создаю объект хеша
CryptCreateHash(hProv, CALG_GR3411, 0, 0, @hHash) // здесь вндь задается алгоритм для подсчета дайжеста

3. Считаю дайжест
AssignFile(outfile, ExtractFileDir(Application.ExeName)+’/’+FILE_OUTNAME);
ReWrite(outfile,1);
AssignFile(infile, ExtractFileDir(Application.ExeName)+’/’+FILE_INNAME);
ReSet(infile,1);
while not EOF(infile) do begin
BlockRead(infile, buf, 512, size);
if not CryptHashData(hHash, @buf, size, 0) then begin
ShowMessageLastError (’Error: ’);
exit;
end;
end;

if not CryptGetHashParam(hHash, HP_HASHVAL, nil, @size, 0) then begin
ShowMessageLastError (’Error: ’);
exit;
end;

GetMem(Hash, size);

if not CryptGetHashParam(hHash, HP_HASHVAL, Hash, @size, 0) then begin
ShowMessageLastError(’Error: ’);
exit;
end;

BlockWrite(outfile, Hash, size);


Может быть я что-то упускаю, или не в той последовательности делаю?
15.08.2005 12:13:03Kirill Sobolev
А без блочного чтения тоже не работает?
15.08.2005 13:19:28Ирина
Без блочного чтения это как? Заглатывать целиком. Но я уже задавала этот вопрос
http://cryptopro.ru/CryptoPro/forum/myforum.asp?q=1891
выяснила, что целиком нельзя.
15.08.2005 13:43:00Kirill Sobolev
если на маленьком файле - то можно