Вычисления хэш значения данных
Download 22.66 Kb.
|
Лаборатория1
- Bu sahifa navigatsiya:
- По предмету: Криптопровайдеры На тему : Вычисления хэш значения данных Направление: Информационная безопасность
- Используемые программы
Министерство высшего и среднего специального образования Республики Узбекистан Национальный Университет Узбекистана имени Мирзо Улугбека Лабораторная работа №1 По предмету: Криптопровайдеры На тему: Вычисления хэш значения данных Направление: Информационная безопасность Проверил: Сайманов И.М. Выполнил: студент III курса Захиров Фирдавс Цель работы: Создание программы вычисления хеш значения данных с помощью криптопровайдера. Используемые программы: MS Visual Studio, ОС Windows 7 и криптопровайдеры. Используемые технические средства: Компьютер. Последовательность выполнение работы: Создание соединения с криптопровайдером. Создание хеш объекта. Получение адрес файла. Хеширование данных по блокам. Получение хеш значения. Освобождение памяти. Удаление соединения с криптопровайдером. Результат лаборатории должен оформляться в виде отчета. Отчет по лаборатории должен состоять из следующих частей: Содержание:
Теоретическая часть Последовательность создания программы Код программы Вывод Используемая литература Теоретическая часть 1) Функция CryptAcquireContext используется для создания дескриптора определенного ключевого контейнера в рамках определенного криптопровайдера. Дескриптор, который возвращает функция, можно применять для вызовов выбранного криптопроваидера. Функция выполняет две операции. Сначала она пытается найти криптопровайдер с характеристиками, описанными в параметрах dwProvType и pszProvider. Если криптопровайдер найден, то функция пытается найти ключевой контейнер в рамках криптопровайдера в соответстствии с именем, указанным параметром pszContainer. Эту функцию также используют для создания и уничтожения ключевых контейнеров в зависимости от значения параметра dwFlags. 2)Функция CryptCreateHash используется для инициализации хеширования потока данных. Она создает объект хеш-функции и возвращает приложению его дескриптор , Этот дескриптор используется при вызовах функций CryptHashData и CryptHashSessionKey для хеширования потока данных и сессионных ключей. 3) Функция CryptHashData используется для добавления данных к объекту хеш-функции. Ее и функцию CryptHashSessionКеу можно вызывать многократно при вычислении хеша для данных разбитых на блоки. Перед вызовом этой функции следует вызвать функцию CryptCreateHash получения дескриптора объекта хеш-функции. 4)Функция CryptGetHashParam возвращает параметры объекта хеш-функции. Через эту функцию можно получить фактическое значение хеша. 2. Последовательность создание программы Сначала объявили переменные, потом мы подключились через функцию CryptAcquireContext() к криптопровайдеру. Затем создали хеш объект используя CryptCreateHash(), ввели адрес файла и по блочно считали и захешировали данные с помощью CryptHashData(). Далее мы узнали длину хеш значения и выделили память под него. Используя функцию CryptGetHashParam() мы записали хеш значение в выделенную память и вывели его. В конце освободили память. 3.Исходный код #include #include #include #include #include #include #include using namespace std; #define MY_ENCODING_TYPE (PKCS_7_ASN_ENCODING | X509_ASN_ENCODING) void HandleError(char *s); FILE *FILE_IN,*FILE_OUT; int main() { HCRYPTPROV hProv; // Handle for the HCRYPTHASH hHash; // Handle for the char address[128]; if (CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, NULL)) { printf("CSP context acquired \n"); } else { HandleError("Error during CryptAcquireContext"); } if (CryptCreateHash(hProv, CALG_SHA1, NULL, NULL, &hHash)) { printf("Hash object created \n"); } else { HandleError("Error during CryptCreateHash"); } printf("Enter address file \n"); cin>>address; BYTE s[20]; FILE_IN=freopen(address,"r",stdin); int sz; do { sz=fread(s,1,20,FILE_IN); if (CryptHashData(hHash, s, sz, NULL)) { printf("The data buffer has been hashed \n"); } else { HandleError("Error during CryptHashData \n"); } } while(sz==20); if(CryptGetHashParam(hHash,HP_HASHVAL,NULL,&pwdDataLen,NULL)) { printf("All ok\n"); } else { HandleError("Error"); } BYTE *pbHash = (BYTE*)malloc(pwdDataLen); if (!pbHash)HandleError("Out of memory \n"); CryptGetHashParam(hHash,HP_HASHVAL,pbHash,&pwdDataLen,NULL); for (int i = 0; i < pwdDataLen; i++) { printf("%2.2x", pbHash[i]); } if (pbHash) free(pbHash); if (hHash) CryptDestroyHash(hHash); if (hProv) CryptReleaseContext(hProv, NULL); }
void HandleError(char *s) { printf("An error occurred in running the program.\n"); printf("%s\n", s); printf("Error number %x\n.", GetLastError()); printf("Program terminating.\n"); exit(1); } 4. Вывод Выполнив эту лабораторную работу мы ознакомились с хеш функциями и хеш значениями и узнали для чего они нужны. Хеш функция – это инъективная функция, которая возвращает данные фиксированной длины и также в качестве аргументов задает любое количество битов. Хеш значение – это значение хеш функции. В данной лабораторной работе мы хешировали по-блочно данные с помощью алгоритма хеширования SHA1. 5.Используемая литература А. Щербаков, А. Домашев. Использование и синтез криптографических интерфейсов Download 22.66 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling