Форум программистов, компьютерный форум CyberForum.ru

С++ Разбор кода хэширования Md5 - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Управление таймером http://www.cyberforum.ru/cpp-beginners/thread412159.html
Создать программка для управления таймером с такими параметрами: R= 0 - 10 ; F(x)=y=((77-x)%200)*0.1+R+150 ; Частота=145.5 Гц;
C++ Очередь пеменять местами элементы Вот задание: Поменять местами минимальный и первый элементы очереди. Минимальный и первый элемент найдены, но что-то не так. Помогите! #include <iostream.h> #include <stdlib.h> struct toch{ //n~i^c,a"a`?i` n~o`?o'e^o`o'?o' int inf; http://www.cyberforum.ru/cpp-beginners/thread412146.html
Функция для вычисления среднего роста C++
помогите разобраться в чем дело,надо посчитать средний рост женщин, почему пишет что "rost" и "pol" не инициализированы, что в функции не так???указывает что проблема в 40 строке # include <iostream> # include <windows.h> # include <conio.h> const int N=2; struct ZAPIS
C++ Поиск наименьшего элемента массива
#include<iostream.h> #include<conio.h> const n=5; char StrBuf; int i; int poshyk(int a, int NextIndex); void vved(int a); void main(void)
C++ Ввод строки, содержащей несколько слов. http://www.cyberforum.ru/cpp-beginners/thread412140.html
Здравствуйте, необходимо ввести строку, содержащую несколько слов из файла. Вот мой вариант: #include "stdafx.h" #include "conio.h" #include "string" #include "iostream" using namespace std; int _tmain(int argc, _TCHAR* argv) {
C++ Помогите решить задачи по C++ Помогите решить задачи по C++. Хотя бы подскажите как начать, особенно 4.1 и 4.2 не понимаю я. подробнее

Показать сообщение отдельно
чёрный ветер
Сообщений: n/a
20.12.2011, 00:11     С++ Разбор кода хэширования Md5
ктонибудь может объяснить смысловую нагрузку данной программы, что происходит!
Я понимаю так, по функциям определение криптопровайдера хеширование, работа с буфером в который заносятся какие то данные, выведение хэша.
поконкретнее ктонибудь может описать ? Хелпоните плз
Код
#include "stdafx.h"
#pragma comment(lib, "crypt32.lib")
 
#define HASH_BUFF_LEN 10*1024*1024
 
#include <tchar.h>
#include <stdio.h>
#include <Windows.h>
#include <WinCrypt.h>
 
HCRYPTPROV TryToOpenCryptoProvider()
{
	HCRYPTPROV hProv = NULL;
	TCHAR* pszContainerName = TEXT("FHashContainer");
	if(!CryptAcquireContext(&hProv, pszContainerName, NULL, PROV_RSA_FULL, 0))
	{
		if(NTE_BAD_KEYSET == GetLastError())
		{
			if(!CryptAcquireContext(&hProv, pszContainerName, NULL, PROV_RSA_FULL, CRYPT_NEWKEYSET))
			{
				hProv = NULL;
			}
		}else
		{
			hProv = NULL;
		}
	}
 
	if(!hProv)
		_tprintf(TEXT("Error: Failed to acquire context\n"));
	return(hProv);
}
 
HCRYPTHASH TryToCreateHash(HCRYPTPROV hProv)
{
	if(!hProv)
		return(NULL);
	
	HCRYPTHASH hHash = NULL;
	if(!CryptCreateHash(hProv, CALG_MD5, NULL, 0, &hHash))
	{
		_tprintf(TEXT("Error: Failed to create hash generator\n"));
		hHash = NULL;
	}
 
	return(hHash);
}
 
BOOL TryToHashFile(HANDLE hFile, HCRYPTHASH hHash)
{
	BYTE* pbBuffer = (BYTE*)HeapAlloc(GetProcessHeap(), 0 , HASH_BUFF_LEN);
	if(!pbBuffer)
	{
		_tprintf(TEXT("Error: Unable to allocate %d bytes in the process heap\n"), HASH_BUFF_LEN);
		return(FALSE);
	}
	ZeroMemory(pbBuffer, HASH_BUFF_LEN);
 
	while(TRUE)
	{
		DWORD dwRB = 0;
		BOOL fResult = ReadFile(hFile, (PVOID)pbBuffer, HASH_BUFF_LEN, &dwRB, NULL);
		
		if((0 == dwRB)||(!fResult))
			break;
		
		if(fResult && (dwRB > 0))
			CryptHashData(hHash, pbBuffer, dwRB, 0);
	}
 
	HeapFree(GetProcessHeap(), 0, pbBuffer);
	return(TRUE);
}
 
void TryToPrintHash(HCRYPTHASH hHash)
{
	DWORD dwHashSize = 0, dwRetLen = sizeof(dwHashSize);
	if(!CryptGetHashParam(hHash, HP_HASHSIZE, (PBYTE)&dwHashSize, &dwRetLen, 0))
	{
		_tprintf(TEXT("Error: Failed to obtain hash size\n"));
		return;
	}
 
	PBYTE pbResult = (PBYTE)HeapAlloc(GetProcessHeap(), 0, dwHashSize);
	ZeroMemory(pbResult, dwHashSize);
	dwRetLen = dwHashSize;
	if(CryptGetHashParam(hHash, HP_HASHVAL, pbResult, &dwRetLen, 0))
	{
		_tprintf(TEXT("HASH: {"));
		for(unsigned int i=0; i<dwRetLen; i++)
			_tprintf(TEXT(" %0*X "),2, pbResult[i]);
		_tprintf(TEXT("}\n"));
	}
 
	HeapFree(GetProcessHeap(), 0, pbResult);
}
 
int __cdecl _tmain(int argc, TCHAR** argv)
{
	HANDLE hFile = INVALID_HANDLE_VALUE;
	HCRYPTPROV hProv = NULL;
	HCRYPTHASH hHash = NULL;
 
	if(argc < 2)
	{
		_tprintf(TEXT("Error: File name is not specified\n"));
		return(0);
	}
 
	hFile = CreateFile(argv[1], GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
	if(INVALID_HANDLE_VALUE == hFile)
	{
		_tprintf(TEXT("Error: Unable to open file %s\n"), argv[1]);
		return(0);
	}
 
	__try
	{
		hProv = TryToOpenCryptoProvider();
		if(!hProv)
			__leave;
 
		hHash = TryToCreateHash(hProv);
		if(!hHash)
			__leave;
 
		if(!TryToHashFile(hFile, hHash))
			__leave;
 
		TryToPrintHash(hHash);
	}__finally
	{
		if(hHash)
			CryptDestroyHash(hHash);
		if(hProv)
			CryptReleaseContext(hProv, 0);
		if(hFile!=INVALID_HANDLE_VALUE)
			CloseHandle(hFile);
	}
 
	return(0);
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 21:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru