| ||||
| ||||
Не подскажите, почему при подсчете дайжеста у одного и того же документа, получаются разные результаты? Ведь они должны совпадать? | ||||
Ответы: | ||||
| ||||
Должны Но если при подсчете используется MAC алгоритм (хэш считается в зависимости от ключа), то это нормально, если ключи разные. | ||||
| ||||
Тогда у меня вообще зациклилась проблема. 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); Может быть я что-то упускаю, или не в той последовательности делаю? | ||||
| ||||
А без блочного чтения тоже не работает? | ||||
| ||||
Без блочного чтения это как? Заглатывать целиком. Но я уже задавала этот вопрос http://cryptopro.ru/CryptoPro/forum/myforum.asp?q=1891 выяснила, что целиком нельзя. | ||||
| ||||
если на маленьком файле - то можно | ||||