Форум программистов, компьютерный форум, киберфорум
Наши страницы

Реализация CRC32 - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Матрицы, Ассемблерная вставка. Всем элементам второй строки присвоить соответствующие элементы последнего столбца http://www.cyberforum.ru/cpp-beginners/thread219267.html
помогите решить пожалуйста, у меня зачет срочно!! в первом модуле определена квадратная матрица N го порядка. выводится измененная матрица построчно. это на С сделать надо. во втором модуле всем...
C++ Файл - буфер - файл (istrem/ostream) Всем добрый день. Помогите пожалуйста найти ошибку. Структура для описания объекта - 4 int числа. struct L_Object { int id; int xpos, ypos, zpos; }; Мне нужно реализовать механизм для... http://www.cyberforum.ru/cpp-beginners/thread219261.html
C++ Файлы: упорядочить слова в строках по возрастанию количества латинских строчных букв в словах
Задан текстовый файл Input.txt, состоящий из слов. Разделителями между словами является некоторое множество знаков препинания. Для каждой строки, начиная со второй, продублировать слова, которые...
Дан целый массив максимальной размерности 20*20. Провести сортировку по возрастанию в нечетных строках массива и по убыванию в четных строках. C++
Дан целый массив максимальной размерности 20*20. Провести сортировку по возрастанию в нечетных строках массива и по убыванию в четных строках. Ввод исходного массива организовать из файла, при...
C++ работа с файлами и строками http://www.cyberforum.ru/cpp-beginners/thread219254.html
В файле хранится информация об учениках школы: имя,фамилия, класс(номер и буква),рост .В новый файл переписать информацию о 3 самых высоких учениках в каждой паралели. вывести в отдельный файл чей...
C++ реалезация очереди Реализовать очередь. Организовать работу пользователя со списком при помощи меню: 0 – выход из программы; 1 – добавить новый элемент в голову очереди; 2 – удалить элемент с хвоста очереди; 3 –... подробнее

Показать сообщение отдельно
Даниил Павлов
1 / 1 / 0
Регистрация: 06.05.2010
Сообщений: 33

Реализация CRC32 - C++

24.12.2010, 09:26. Просмотров 1173. Ответов 0
Метки (Все метки)

Здраствуйте, помогите реализовать контрольцелостности dll библиотеки, с помощью CRC32.
Писал CRC16, а вот CRC32 не выходит.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <tchar.h>
#include <windows.h>
 
WORD MakeCRC16(BYTE *buf, WORD Num)
{
    WORD Polynom16=0x8005;
    WORD CRCHL;//хранит текущую CRC
    BYTE CRCBUF;//буфер для очередного байта сообщения
    BYTE i;
    WORD n,c;
    
//первые два байта сообщения
    CRCHL=((WORD)buf[0])<<8 | buf[1];
    //по очереди достаём все байты сообщения
    for(n=2;n<Num;n++)
    {
//кладём в буфер очередной байт сообщения
        CRCBUF=buf[n];
//и побитно вдвигаем его в CRCHL
        for(i=0;i<8;i++)
        {
//бит, выдвинутый слева из CRCHL (bool!!)
            c=CRCHL & 0x8000;
//сдвиг CRCHL и вдвигание старшего бита из CRCBUF
            CRCHL=CRCHL<<1 | CRCBUF>>7;
//сдвиг CRCBUF
            CRCBUF=CRCBUF<<1;
//если из CRCHL вначале был выдвинут ненулевой бит, то xor
            if(c)CRCHL^=Polynom16;
        }
    }
 
//"добавляем в конец сообщения ещё 2 нулевых байта"
    for(i=0;i<16;i++)
    {
//бит, выдвинутый слева из CRCHL (bool!!)
        c=CRCHL & 0x8000;
//сдвиг CRCHL и вдвигание нуля из CRCBUF
        CRCHL=CRCHL<<1;
//если из CRCHL вначале был выдвинут ненулевой бит,то xor
        if(c)CRCHL^=Polynom16;
    }
    return CRCHL;
}
 
bool CheckFile(LPCTSTR filename)
{
    bool b=true;
    HANDLE h=CreateFile(filename,GENERIC_READ,FILE_SHARE_READ,0,
        OPEN_EXISTING,0,0);
    if(h==INVALID_HANDLE_VALUE) 
        return false;
    DWORD dwSize;
    // Размер файла без размера записанного CRC.
    dwSize=GetFileSize(h,0)-2;
    PBYTE pMem=new BYTE[dwSize];
    if(pMem==0)
        return false;
    DWORD dwCount;
    ReadFile(h,pMem,dwSize,&dwCount,0);
    WORD qw=MakeCRC16(pMem,(WORD)dwSize);
    
    // Считываем CRC.
    PBYTE pMemCRC=new BYTE[2];
    ReadFile(h,pMemCRC,2,&dwCount,0);
    WORD crc=*(WORD*)pMemCRC;
 
    CloseHandle(h);
    delete [] pMem;
    delete [] pMemCRC;
    if (crc==qw)
        return true;
    else 
        return false;
}
 
BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, LPVOID Rez)
{
    switch (dwReason) 
    {
        case DLL_PROCESS_ATTACH:
        {
            TCHAR Buf[MAX_PATH]; // MAX_PATH - максимальная длина строки с путём.
            GetModuleFileName(hModule,Buf,MAX_PATH);
            BOOL b=CheckFile((LPCTSTR)Buf);
            if(!b)
                return FALSE;
            break;
        }
        case DLL_THREAD_ATTACH:
            break;
        case DLL_THREAD_DETACH:
            break;
        case DLL_PROCESS_DETACH:
            break;
    }
    return(TRUE); 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru