Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2020, 23:46   #1
pups189
Новичок
Джуниор
 
Регистрация: 30.04.2020
Сообщений: 2
По умолчанию MD5 Файлов в папке

Пытаюсь найти md5 для файлов в папке, но пока могу найти только для одного файла
Код:
#include <stdio.h>
#include <windows.h>
#include <Wincrypt.h>
#include <fstream>
#include <iostream>
#include <conio.h>
#include <string>
using namespace std;

#define BUFSIZE 1024
#define MD5LEN  16

DWORD main()
{
    DWORD dwStatus = 0;
    BOOL bResult = FALSE;
    HCRYPTPROV hProv = 0;
    HCRYPTHASH hHash = 0;
    HANDLE hFile = NULL;
    BYTE rgbFile[BUFSIZE];
    DWORD cbRead = 0;
    BYTE rgbHash[MD5LEN];
    DWORD cbHash = 0;
    CHAR rgbDigits[] = "0123456789abcdef";
    LPCWSTR filename = L"C:\\ford.txt";


    hFile = CreateFile(filename,
        GENERIC_READ,
        FILE_SHARE_READ,
        NULL,
        OPEN_EXISTING,
        FILE_FLAG_SEQUENTIAL_SCAN,
        NULL);

    if (INVALID_HANDLE_VALUE == hFile)
    {
        dwStatus = GetLastError();
        printf("Error opening file %s\nError: %d\n", filename,
            dwStatus);
        return dwStatus;
    }


    if (!CryptAcquireContext(&hProv,
        NULL,
        NULL,
        PROV_RSA_FULL,
        CRYPT_VERIFYCONTEXT))
    {
        dwStatus = GetLastError();
        printf("CryptAcquireContext failed: %d\n", dwStatus);
        CloseHandle(hFile);
        return dwStatus;
    }

    if (!CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash))
    {
        dwStatus = GetLastError();
        printf("CryptAcquireContext failed: %d\n", dwStatus);
        CloseHandle(hFile);
        CryptReleaseContext(hProv, 0);
        return dwStatus;
    }

    while (bResult = ReadFile(hFile, rgbFile, BUFSIZE,
        &cbRead, NULL))
    {
        if (0 == cbRead)
        {
            break;
        }

        if (!CryptHashData(hHash, rgbFile, cbRead, 0))
        {
            dwStatus = GetLastError();
            printf("CryptHashData failed: %d\n", dwStatus);
            CryptReleaseContext(hProv, 0);
            CryptDestroyHash(hHash);
            CloseHandle(hFile);
            return dwStatus;
        }
    }

    if (!bResult)
    {
        dwStatus = GetLastError();
        printf("ReadFile failed: %d\n", dwStatus);
        CryptReleaseContext(hProv, 0);
        CryptDestroyHash(hHash);
        CloseHandle(hFile);
        return dwStatus;
    }
    
    cbHash = MD5LEN;
    if (CryptGetHashParam(hHash, HP_HASHVAL, rgbHash, &cbHash, 0))
    {
        printf("MD5 hash of file %S is: ", filename);
        for (DWORD i = 0; i < cbHash; i++)
            printf("%02X", int(rgbHash[i]));
        printf("\n");
    }
    
    else
    {
        dwStatus = GetLastError();
        printf("CryptGetHashParam failed: %d\n", dwStatus);
    }

    CryptDestroyHash(hHash);
    CryptReleaseContext(hProv, 0);
    CloseHandle(hFile);


    WIN32_FIND_DATAW wfd;
    HANDLE const hFind = FindFirstFileW(L"C:\\lol\\*", &wfd);
    setlocale(LC_ALL, "");

    if (INVALID_HANDLE_VALUE != hFind)
    {
        do
        {
            printf("MD5 hash of file %S is: ",  &wfd.cFileName[0]);
            for (DWORD i = 0; i < cbHash; i++)
            printf("%02X", int(rgbHash[i]));
            printf("\n");
            } while (NULL != FindNextFileW(hFind, &wfd));

        FindClose(hFind);
    }
        return dwStatus;
 }
pups189 вне форума Ответить с цитированием
Старый 14.12.2020, 12:08   #2
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

0. main не DWORD возвращает
1. ну так запихните это вычисление хеша в функцию и зовите для каждого файла
FrosyaZZ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция перебора файлов в папке не видит файлов ПВВ Microsoft Office Excel 1 22.10.2013 17:30
Расчёт количества файлов в папке без учёта скрытых файлов dfc Microsoft Office Excel 2 11.10.2013 12:06
Скрипт, который считает количество файлов в каждой папке, находящихся в данной папке so1idsnake Помощь студентам 20 07.08.2013 22:38
Функция подсчета md5 файлов tumanovalex C# (си шарп) 3 08.06.2011 23:22
Отслеживает появление в папке файлов. слежение за определенным файлом в определенной папке. RammFan Win Api 1 09.06.2007 11:09