Контрольная Сумма (CRC, MD5) - C (СИ)

Формулировка задачи:

Здраствуйте дорогие программисты!!!! Вот в чём проблема!! Есть такая програмка:
//---------------------------------------------------------------------------
#pragma  hdrstop
#include <stdio.h>
#include <dir.h>
#include <conio.h>
#include <windows.h>
#include <locale>
#include <iostream.h>
#include <math.h>
#include <string.h>
#include <dos.h>
 
void info(void)
{ setlocale (LC_ALL,".866");
wprintf(L"                               Soderjimoe kataloga: \n");
wprintf(L"|Imea.Rashirenia        |Razmer faila                   |Data sozdania             |Kontrolinaea summa|\n");
printf("|-----------------------|-------------------------|----------------------|-----------------|\n");
}
void main()
{
clrscr();
struct ffblk f;
int done;
setlocale (LC_ALL,".866");
done = findfirst("**.**", &f, 0);
system("mode con cols=126 lines=59");
info();
while (!done)
{
printf("|%-18s",f.ff_name);
printf("     |%-6d",f.ff_fsize/1024);
printf("                   |%d:%d:%d %d/%d/%d.\n",
        f.ff_ftime>>11,(f.ff_ftime>>5)   &0x3f, (f.ff_ftime<<1)
        &0x3f, f.ff_fdate &0x1f, (f.ff_fdate>>5) &0x0f,(f.ff_fdate>>9) + 1980);
 
printf("|-----------------------|-------------------------|----------------------|-----------------|\n");        
done = findnext(&f);
}
system("color F0");
getch();
}
//---------------------------------------------------------------------------
Она у меня работает на все 100%,так вот в чём проблема нужна сюда вставить функцию вычесления контрольной суммы Md5 или CRC и чтоб это выводилось в области кде написана контрольноя сумма!! Я видел и здесь и везде куча алгоритмов и так далее но суть в том что незнаю как подогнать под мою програму,и чтоб не как во всех алгоритмов вычесляет для одного файла толька,мне надо чтоб для всех файлов в папке,как афиширует моя програма всё содержимое папки и атрибуты каждого файла тоже самое надо с контрольной суммой,прошу очень впишите имено эту програму чтоб осушествить это вычесление!!!И чтоб всё остальное тоже работала!!! Спасибо за ранее!! (Желательно Crc32 он кароче по длине и будет влезать на выводе в консоле))


textual

Код к задаче: «Контрольная Сумма (CRC, MD5) - C (СИ)»

#include <stdio.h>
#include <stdint.h>
 
uint32_t crc32_bitwise(
    const void* data,
    size_t length,
    uint32_t previousCrc32
) { 
    unsigned int j;
    uint32_t crc = ~previousCrc32;
    unsigned char* current = (unsigned char*) data; 
    while (length--) { 
        crc ^= *current++; 
        for (j = 0; j < 8; j++) 
            crc = ((crc & 1)
              ? (crc >> 1) ^ 0xEDB88320
              : (crc >> 1));
    } 
    return ~crc;
}
 
uint32_t crc32_file(const char* filename) {
    FILE *file;
    int len;
    unsigned char buffer[1024] ;
 
    if ((file = fopen (filename, "rb")) == NULL) {
        printf("'%s' can't be opened\n", filename);
        return 0;
    }
 
    uint32_t crc32 = 0;
    while ((len = fread(buffer, 1, sizeof(buffer), file)) != 0) {
        crc32 = crc32_bitwise(buffer, len, crc32);
    }
    fclose(file);
    return crc32;
}
 
int main() {
    const char filePath[] = "/home/jsbot/src/tmp/a.c";
    printf("crc32 for '%s' is %08x\n", filePath, crc32_file(filePath));
    return 0;
}
Эта работа вам не подошла?

Вы всегда можете заказать любую учебную работу у наших авторов от 20 руб.


СДЕЛАЙТЕ РЕПОСТ

12   голосов, оценка 3.917 из 5

Источник