Discussion:
Funcion para comprobar CRC de un fichero. Ayuda Por Favor
(demasiado antiguo para responder)
newton
2006-06-01 11:52:31 UTC
Permalink
Llevo días buscando sin éxito una función que me permita comprobar
el CRC de un fichero de forma simple, pero que devuelva firmas más o
menos fiables, es decir, que no de muchos falsos positivos al buscar un
fichero por su firma (a ser posible ninguno). Soy muy novato, y aunque
he encontrado códigos y teoria, no termino de comprenderlos y no soy
capaz de integrarlo en mi programa.

¿Alguno de ustedes conoce una función del tipo: funcion (FILE *), en
la que le pase el fichero y me devuelva la firma, o algo similar?

Con un poco de ayuda a través de los foros de elrincondelc.com he
estado escribiendo una función que genera una firma de verificación,
pero es muy básica y el número de falsos positivos se dispara más de
la cuenta.

Agradeceré mucho cualquier ayuda.
newton
2006-06-01 13:05:46 UTC
Permalink
Como siempre me pasa, encontré una posible solución tras postear para
pedir socorro. Es una función que he modificado para calcular el CRC
de un fichero en vez de una cadena de caracteres como era
originalmente, y la encontré en un post antiguo de este grupo, pero no
se si es fiable o no. En mis pruebas no me ha dado falsos positivos,
pero me gustaría que alguien que entienda del tema me diga su
opinión. Aquí pongo el código:

****************************************************************************
static int CalcularCRC (string ruta){
FILE *fichero;
unsigned int CRC;
char aux;
int cb;

if((fichero = fopen(ruta,"rb")) == NULL){
printf("\n\nERROR al abrir el fichero para calcular firma");
printf("\n%s", ruta);
return 0;
}
else{
CRC = 0xFFFF;

while(fread(&aux,sizeof(char),1,fichero)){
CRC ^= (unsigned char) aux;
for(cb=0;cb<8;cb++){
if(CRC & 0x0001){
CRC = (CRC >> 1) ^ 0xA001;
}
else{
CRC >>= 1;
}
}
}
if(fclose(fichero) == EOF){
printf("\n\nERROR al cerrar el fichero cuya firma se ha
calculado");
printf("\n%s", ruta);
}
return CRC;
}
}
***************************************************************************************

Gracias
Julián Albo
2006-06-01 14:44:36 UTC
Permalink
Post by newton
Llevo días buscando sin éxito una función que me permita comprobar
el CRC de un fichero de forma simple, pero que devuelva firmas más o
menos fiables, es decir, que no de muchos falsos positivos al buscar un
fichero por su firma (a ser posible ninguno). Soy muy novato, y aunque
he encontrado códigos y teoria, no termino de comprenderlos y no soy
capaz de integrarlo en mi programa.
En esta página hay una completa explicación de los crc y de como
programarlos.

http://www.ross.net/crc/crcpaper.html

Lo de que no te pueda dar ningún falso positivo en búsquedas por firma,
simplemente es imposible, pero con un crc de 32 bits no es muy probable que
haya duplicados.
--
Salu2

Inviato da X-Privat.Org - Registrazione gratuita http://www.x-privat.org/join.php
newton
2006-06-01 15:04:24 UTC
Permalink
Post by Julián Albo
Lo de que no te pueda dar ningún falso positivo en búsquedas por firma,
simplemente es imposible, pero con un crc de 32 bits no es muy probable que
haya duplicados.
¿Y sobre la función que he posteado? ¿Cómo la ves en cuanto a
fiabilidad?

Saludos
Julián Albo
2006-06-01 16:25:23 UTC
Permalink
Post by newton
Post by Julián Albo
Lo de que no te pueda dar ningún falso positivo en búsquedas por firma,
simplemente es imposible, pero con un crc de 32 bits no es muy probable
que haya duplicados.
¿Y sobre la función que he posteado? ¿Cómo la ves en cuanto a
fiabilidad?
Así de un vistazo, muy dudosa.
--
Salu2

Inviato da X-Privat.Org - Registrazione gratuita http://www.x-privat.org/join.php
newton
2006-06-01 23:25:06 UTC
Permalink
Post by Julián Albo
Así de un vistazo, muy dudosa.
--
Salu2
Bueno, pues ya ha cumplido con su objetivo y no me quejo, sólo un
falso positivo. He usado el programa para buscar en el disco duro de un
PC unos ficheros personales que sospechaba habían sido copiados y
escondidos por algún sitio. Los ha encontrado sin problemas, algunos
de ellos con nombres distinto, cosa que obviamente no influía.
Debería de haber incluido una función de formateo de disco, por
listo.

La comprobación ha sido de todos los ficheros de un SO windows XP
instalado (+ los propios del usuario) contra una lista de ficheros
(unos 2000 y pico) que tenía en un CD. Un sólo falso positivo, como
ya dije. Digo esto para que si alguien la va a usar sepa más o menos
el grado de fiabilidad.

Saludos
J.A. Gutierrez
2006-06-02 07:44:55 UTC
Permalink
newton <***@gmail.com> wrote:

: Bueno, pues ya ha cumplido con su objetivo y no me quejo, sólo un
: falso positivo. He usado el programa para buscar en el disco duro de un

si te ha funcionado, no hay mas que hablar.
Pero para otra vez yo utilizaria algo ya hecho. Usar
p.e. el codigo de referencia de md5 es trivial.
--
PGP and other useless info at \
http://webdiis.unizar.es/~spd/ \
finger://daphne.cps.unizar.es/spd \ Timeo Danaos et dona ferentes
ftp://ivo.cps.unizar.es/pub/ \ (Virgilio)
Loading...