Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,190   Сказал «Спасибо»: 621 раз Поблагодарили: 2397 раз в 1886 постах
|
motogarri написал:Они по разным алгоритмам вычисляются или CAPICOM как-то кодирует по своему? Код:CryptCreateHash(hProv, CALG_GR3411, 0, 0, hHash)
CryptHashData(hHash, data, Len(data), 0)
If CryptGetHashParam(hHash, HP_HASHSIZE, hashSize, dataLen, 0) <> 0 Then
dataLen = hashSize
Redim hash(dataLen - 1)
If CryptGetHashParam(hHash, HP_HASHVAL, hash(0), dataLen, 0) = 0 Then
Error 16, "Ошибка получения хеш-значения"
End If
End If
Тут я получаю бинарный массив, который в виде строки будет выглядеть так: 801094720046147247182215244891032265199170250170109181132142247122342114105126245126 CAPICOM возвращает совсем другое значение: Код:hash = hashedData.Hash(data)
Результат: 86383C23AC83B80834388A14595B1532AFDA6BE2 И нужно ли вообще кодировать бинарный хэш, для формирования ЭЦП? Я попытался было, но что-то мне CryptBinaryToString всегда выдает ноль: Код:Declare Private Function CryptBinaryToStringA Lib "crypt32.dll" (Byval pbBinary As String, Byval cbBinary As Long, Byval dwFlags As Long, Byval pszString As String, pcchString As Long) As Long
Dim hexHash As String
Dim hexLength As Long
Call CryptBinaryToStringA(strHash, Len(strHash), CRYPT_STRING_HEX, "", hexLength)
Call CryptBinaryToStringA(strHash, Len(strHash), CRYPT_STRING_HEX, hexHash, hexLength)
Пробовал на вход бинарный массив давать - результат тот же: hexLength = 0 hexHash = "" GetLastError = 0 1. Где пример - как расчитывается хеш по ГОСТ в Capicom ? 2. Приведенный хеш полученный от Capicom - есть sha1, а не ГОСТ Р 34.11-94 3. В Capicom - зарезервированы идентификаторы алгоритмов хеширования (md5, sha1, sha256) - соответственно вопрос №1 "лишний" Отредактировано пользователем 23 августа 2012 г. 22:03:01(UTC)
| Причина: Не указана |
|