|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
CryptGetHashParam
[New - Windows NT]
[New - Windows 95, OEM Service Release 2] The CryptGetHashParam function lets applications retrieve data that governs of the operations of a hash object. The actual hash value can also be retrieved using this function.
BOOL CRYPTFUNC CryptGetHashParam(
HCRYPTHASH hHash, DWORD dwParam, BYTE *pbData, DWORD *pdwDataLen, DWORD dwFlags );
Parameters
hHash
[in] A handle to the hash object on which to query parameters.
dwParam
[in] The parameter number. See the "Remarks" section for a list of valid parameters.
pbData
[out] The parameter data buffer. The function copies the specified parameter data to this buffer. The form of this data will vary, depending on the parameter number. This parameter can be NULL if all you are doing is determining the number of bytes required for the returned parameter data.
pdwDataLen
[in/out] The address of the parameter data length. Before calling this function, the caller should set this parameter to the length, in bytes, of the pbData buffer. Upon return, this address will contain the number of bytes of parameter data copied to the buffer. If the buffer specified by pbData is not large enough to hold the data, the function returns the ERROR_MORE_DATA error code (through GetLastError), and stores the required buffer size, in bytes, in the variable pointed to by pdwDataLen.
If pbData is NULL, then no error is returned and the function stores the size of the data, in bytes, in the variable pointed to by pdwDataLen.
dwFlags
[in] The flag values. This parameter is reserved for future use and should always be zero.
Remarks
The dwParam value can be set to one of the following hash parameter types:
HP_ALGID
The hash algorithm. The pbData buffer will contain a ALG_ID value indicating the algorithm that was specified when the hash object was created. See the CryptCreateHash function for a list of hash algorithms.
HP_HASHSIZE
The hash value size. The pbData buffer will contain a DWORD value indicating the number of bytes in the hash value. This value will usually be 16 or 20, depending on the hash algorithm. Applications should retrieve this parameter just before the HP_HASHVAL parameter so the correct amount of memory can be allocated.
HP_HASHVAL
The hash value. The pbData buffer will contain the hash value or message digest for the hash object specified by hHash. This value is generated based on the data supplied earlier to the hash object through the CryptHashData and CryptHashSessionKey functions. Once this parameter has been retrieved, the hash object is marked "finished" and no more data can be added to it.
Note that some CSPs may add additional parameters that can be queried through this function.
Return Values
If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To retrieve extended error information, use the GetLastError function. The following table lists the error codes most commonly returned by the GetLastError function. The error codes tat prefaced by "NTE" are generated by the particular CSP you are using.
Error Description ERROR_INVALID_HANDLE One of the parameters specifies an invalid handle. ERROR_INVALID_PARAMETER One of the parameters contains an invalid value. This is most often an illegal pointer. NTE_BAD_FLAGS The dwFlags parameter is nonzero. NTE_BAD_HASH The hash object specified by the hHash parameter is invalid. NTE_BAD_TYPE The dwParam parameter specifies an unknown parameter number. NTE_BAD_UID The CSP context that was specified when the hash was created cannot be found.
Example
#include HCRYPTPROV hProv = 0; HCRYPTHASH hHash = 0; BYTE *pbHash = NULL; DWORD dwHashLen; #define BUFFER_SIZE 256 BYTE pbBuffer[BUFFER_SIZE]; DWORD dwCount; DWORD i;
// Get handle to the default provider. if(!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0)) { printf("Error %x during CryptAcquireContext!\n", GetLastError()); goto done; }
// Create hash object. if(!CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash)) { printf("Error %x during CryptBeginHash!\n", GetLastError());
goto done; }
// Fill buffer with test data. for(i = 0 ; i < BUFFER_SIZE ; i++) { pbBuffer[i] = (BYTE)i; }
// Hash in buffer. if(!CryptHashData(hHash, pbBuffer, BUFFER_SIZE, 0)) { printf("Error %x during CryptHashData!\n", GetLastError()); goto done; }
// Read hash value size and allocate memory. dwCount = sizeof(DWORD); if(!CryptGetHashParam(hHash, HP_HASHSIZE, (BYTE *)&dwHashLen, &dwCount, 0)) { printf("Error %x during reading hash size!\n", GetLastError());
goto done; } if((pbHash = malloc(dwHashLen)) == NULL) { printf("Out of memory!\n"); goto done; }
// Read hash value. if(!CryptGetHashParam(hHash, HP_HASHVAL, pbHash, &dwHashLen, 0)) { printf("Error %x during reading hash value!\n", GetLastError()); goto done; }
// Print hash value. for(i = 0 ; i < dwHashLen ; i++) { printf("%2.2x ",pbHash[i]); } printf("\n");
done:
// Free memory. if(pbHash !=NULL) free(pbHash);
// Destroy hash object.
if(hHash) CryptDestroyHash(hHash);
// Release CSP handle. if(hProv) CryptReleaseContext(hProv,0);
See Also
CryptCreateHash, CryptGetKeyParam, CryptHashData, CryptHashSessionKey, CryptSetHashParam
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
CryptGetHashParam
[Новый - Windows NT]
[Новый - Окно 95, Выпуск Услуги OEM 2] Функция CryptGetHashParam позволяет, приложения извлекают данные, которые управляют операций объекта хэша. Фактическая величина хэша может также извлечена используя эту функцию.
BOOL CRYPTFUNC CryptGetHashParam(
HCRYPTHASH hHash, DWORD dwParam, БАЙТ *pbData, DWORD *pdwDataLen, DWORD dwFlags );
Параметры
hHash
[in] ручка на объект хэша к чему параметры запроса.
dwParam
[in] номер параметра. Смотри секцию "Замечаний" для списка правильных параметров.
pbData
[out] буфер данных параметра. Функция копирует определенные данные параметра в этот буфер. Форма этих данных поменяет, в зависимости от номера параметра. Этот параметр может быть НЕДЕЙСТВИТЕЛЕН если все Вы - занятие определяет количество байтов необходимое для возвращанных данных параметра.
pdwDataLen
[в/] адрес длины данных параметра. Перед вызовом этой функции, вызывающий оператор должен устанавливать этот параметр на длину, в байтах, буфера pbData. В возврате, этот адрес будет содержать количество байтов данных параметра скопированного в буфер. Если буфер определенный pbData - не большой достаточно, чтобы держать данные, функция возвращает код ошибки ERROR_MORE_DATA (через GetLastError), и загрузка необходимый буферный размер, в байтах, в переменной указанной, чтобы pdwDataLen.
Если pbData НЕДЕЙСТВИТЕЛЕН, тогда никакая ошибка не возвращана и функция загружает размер данных, в байтах, в переменной указанной, чтобы pdwDataLen.
dwFlags
[in] величины флага. Этот параметр зарезервирован для будущего использования и должно всегда - нулевым.
Замечания
Величина dwParam может быть установлена в один из типов параметра хэша следующего:
HP_ALGID
Алгоритм хэша. Буфер pbData будет содержать величину ALG_ID, указывающую алгоритм, который был определен когда объект хэша был создан. Смотри функцию CryptCreateHash для списка алгоритмов хэша.
HP_HASHSIZE
Размер величины хэша. Буфер pbData будет содержать величину DWORD, указывающую количество байтов в величине хэша. Эта величина обычно будет 16 или 20, в зависимости от алгоритма хэша. Приложения должны извлечь этот параметр точный перед параметром HP_HASHVAL, так что правильная сумма памяти может быть распределена.
HP_HASHVAL
Величина хэша. Буфер pbData будет содержать величину хэша или краткого изложения сообщения для объекта хэша определенного hHash. Эта величина сгенерирована основанное в данных поставленных раньше на объект хэша через CryptHashData и функции CryptHashSessionKey. Как только этот параметр извлечен, объект хэша выделен "завершенное" и больше данные не могут быть добавлены к этому.
Отметьте, что некоторые CSPs может добавить дополнительные параметры, которые могут быть спрошены через эту функцию.
Обратные Величины
Если функция добивается успеха, обратная величина ненулевая. Если функция терпит неудачу, обратная величина нулевая. Для того, чтобы извлекать расширенную информацию ошибки, используйте функцию GetLastError. Следующая таблица включает коды наиболее общей ошибки возвращанные функцией GetLastError. Ошибка кодирует тат prefaced "NTE" сгенерированы конкретным CSP, которое Вы используете.
Описание Ошибки ERROR_INVALID_HANDLE Один из параметров определяет неправильную ручку. ERROR_INVALID_PARAMETER Один из параметров содержит неправильную величину. Это - чаще всего незаконный указатель. NTE_BAD_FLAGS параметр dwFlags ненулевой. NTE_BAD_HASH объект хэша определенный параметром hHash недействителен. NTE_BAD_TYPE параметр dwParam определяет неизвестный номер параметра. NTE_BAD_UID контекст CSP, который был определен когда хэш был создан, не мочь быть обнаружено.
Пример
#include HCRYPTPROV hProv = 0; HCRYPTHASH hHash = 0; БАЙТ *pbHash = НЕДЕЙСТВИТЕЛЬНЫЙ; DWORD dwHashLen; #define BUFFER_SIZE 256 BYTE pbBuffer[BUFFER_SIZE]; DWORD dwCount; i DWORD;
// Получите ручку по умолчанию поставщику. если(!CryptAcquireContext(&hProv, НЕДЕЙСТВИТЕЛЬНЫЙ, НЕДЕЙСТВИТЕЛЬНЫЙ, PROV_RSA_FULL, 0)) { printf("Error %x в течение CryptAcquireContext!\n", GetLastError()); goto сделанным; }
// Создайте объект хэша. если(!CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash)) { printf("Error %x В ТЕЧЕНИЕ CryptBeginHash!\n", GetLastError());
goto сделанным; }
// Буфер Наполнителя с данными теста. для(i = 0; я < BUFFER_SIZE; я++) { pbBuffer[i] = (BYTE)i; }
// Хэш в буфере. если(!CryptHashData(hHash, pbBuffer, BUFFER_SIZE, 0)) { printf("Error %x В ТЕЧЕНИЕ CryptHashData!\n", GetLastError()); goto сделанным; }
// Прочитавшее хэш оценивать размер и распределять память. dwCount = sizeof(DWORD); если(!CryptGetHashParam(hHash, HP_HASHSIZE, (БАЙТ *)&dwHashLen, &dwCount, 0)) { printf("Error %x в течение чтения хэша size!\n", GetLastError());
goto сделанным; } если((pbHash = malloc(dwHashLen)) == НЕДЕЙСТВИТЕЛЬНЫЙ) { printf("Out memory!\n"); goto сделанным; }
// Прочитавшее величину хэша. если(!CryptGetHashParam(hHash, HP_HASHVAL, pbHash, &dwHashLen, 0)) { printf("Error %x В ТЕЧЕНИЕ чтения хэша value!\n", GetLastError()); goto сделанным; }
// Величина хэша Распечатки. для(i = 0; я < dwHashLen; я++) { printf("%2.2x ",pbHash[i]); } printf("\n");
сделанным:
// Свободная память. если(pbHash !=НЕДЕЙСТВИТЕЛЬНЫЙ) свободный(pbHash);
// Уничтожьте объект хэша.
если(hHash) CryptDestroyHash(hHash);
// Выпустите ручку CSP. если(hProv) CryptReleaseContext(hProv,0);
Смотри Также
CryptCreateHash, CryptGetKeyParam, CryptHashData, CryptHashSessionKey, CryptSetHashParam
|
|
|
|
| |