Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Контрольная сумма файла

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Контрольная сумма файла
Имя
Сообщение << Старые топики   Новые топики >>
Контрольная сумма файла - 2008-12-31 07:56:49.993333   
sht0p0r

Сообщений: 23
Оценки: 0
Присоединился: 2008-12-16 03:22:12.390000
Как алгоритм нахождения md5 или CRC для строки применить для нахождения контрольной суммы файла? Если у кого есть, то лучше готовую функцию на языке C.  
Post #: 1
RE: Контрольная сумма файла - 2008-12-31 08:42:56.300000   
b[e]nd3p

Сообщений: 187
Оценки: 0
Присоединился: 2008-09-02 20:54:56.370000
ftp://ftp.isi.edu/in-notes/rfc1952.txt пример CRC32 на С
Post #: 2
RE: Контрольная сумма файла - 2009-01-01 18:28:34.030000   
sht0p0r

Сообщений: 23
Оценки: 0
Присоединился: 2008-12-16 03:22:12.390000
Иногда получаются отрицательные значения, особенно на больших файлах. Почему? Как можно ускорить расчет контрольной суммы этим алгоритмом?
quote:

#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
unsigned long crc_table[256];
int crc_table_computed=0;
void make_crc_table(void){
unsigned long c;
int n, k;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (n = 0; n &lt; 256; n++) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c = (unsigned long) n;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (k = 0; k &lt; 8; k++) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (c &amp; 1) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c = 0xedb88320L ^ (c &gt;&gt; 1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c = c &gt;&gt; 1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; crc_table[n] = c;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; crc_table_computed = 1;
}
unsigned long update_crc(unsigned long crc, unsigned char *buf, int len){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned long c = crc ^ 0xffffffffL;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int n;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!crc_table_computed)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; make_crc_table();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (n = 0; n &lt; len; n++) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c = crc_table[(c ^ buf[n]) &amp; 0xff] ^ (c &gt;&gt; 8);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return c ^ 0xffffffffL;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Return the CRC of the bytes buf[0..len-1]. */
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned long crc(unsigned char *buf, int len)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return update_crc(0L, buf, len);
}
unsigned long crc_res(char *way,char *name){
&nbsp;&nbsp;&nbsp; char f[256];
&nbsp;&nbsp;&nbsp; unsigned long crc = 0L;
&nbsp;&nbsp;&nbsp; unsigned char buffer[255];
&nbsp;&nbsp;&nbsp; int len;
&nbsp;&nbsp;&nbsp; FILE *fil;
&nbsp;&nbsp;&nbsp; strcpy(f,way);
&nbsp;&nbsp;&nbsp; f[strlen(way)-1]='\0';
&nbsp;&nbsp;&nbsp; strcat(f,name);
&nbsp;&nbsp;&nbsp; fil=fopen(f,"rb");
&nbsp;&nbsp;&nbsp; do{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; len=fread(buffer,sizeof(char), 254, fil);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; crc = update_crc(crc, buffer, 254);
&nbsp;&nbsp;&nbsp; }while (len==254);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fclose(fil);
&nbsp; return crc;
}
int main(int argc, char *argv[])
{
&nbsp;&nbsp;&nbsp; printf("%ld",crc_res(argv[1],argv[2]));
&nbsp;&nbsp;&nbsp; return 0;
}
 
Post #: 3
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Контрольная сумма файла







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.