Cálculo CRC32 en Java e iOS

Necesito calcular la sum de comprobación de CRC32 en mi aplicación de iOS y encontré la publicación para el cálculo de CRC32 aquí, https://stackoverflow.com/a/14533955/691626 . La image se lee desde UIImagePickerController (primero se envió el file de image al correo electrónico, luego se usó el iPhone para leer el correo electrónico y se guardó en el rollo de la camera, luego se usó UIImagePickerController para abrir el file)

CGDataProviderRef provider = CGImageGetDataProvider(image.CGImage); NSData* data = (id)CFBridgingRelease(CGDataProviderCopyData(provider)); uint32_t result = crc32(0, data.bytes, data.length); 

Sin embargo, el resultado no coincide con los resultados (CRC32 o CRC32B) que genera este website https://defuse.ca/checksums.htm .

Con el mismo file de image, intenté verificarlo en Java

 // fileName is the path to the file on local drive, for example, /Users/myName/Documents/myimage.jpg on Mac Path path = Paths.get(fileName); byte[] data = Files.readAllBytes(path); CRC32 checksum = new CRC32(); checksum.update(data, 0, data.length); result = checksum.getValue(); 

Al less, el resultado puede coincidir con el CRC32B que genera el website de verificación. ¿Utilizo la biblioteca incorrectamente en iOS? ¿Alguien lo aconsejaría?

ACTUALIZACIÓN 1
Hizo otro experimento

get datos brutos de captureSession

 NSData *rawData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer]; 

convertir los datos sin procesar a la image

 UIImage *originalImage = [[UIImage alloc] initWithData:rawData]; 

convertir la image en representación JPEG (requerida por el server en el que estoy trabajando)

 NSData *jpegData = UIImageJPEGRepresentation(image, 1.0); 

Calcule la sum de comprobación CRC32 para NSData jpegData

 long long checksum1 = crc32(0, jpegData.bytes, jpegData.length); 

guarde la carpeta NSData jpegData en documentos, vuelva a cargarla, calcule su sum de comprobación

 [jpegData writeToFile:filePath atomically:YES]; NSData *jpegDataFromDocuments = [NSData dataWithContentsOfFile:filePath]; long long checksum2 = crc32(0, jpegDataFromDocuments.bytes, jpegDataFromDocuments.length); 

recargue los datos con el administrador de files, calcule su sum de comprobación

 NSData *jpegDataByFileManager = [[NSFileManager defaultManager] contentsAtPath:filePath]; long long checksum3 = crc32(0, jpegDataByFileManager.bytes, jpegDataByFileManager.length); 

Esperaba ver los diferentes valores para checksum1 y checksum2 (o checksum3) porque se leen de forma diferente, pero todos son iguales. Y no coinciden con el valor calculado por el código Java anterior.

ACTUALIZACIÓN 2
Intenté agregar el file a la carpeta de resources y leer el file directamente desde la carpeta, ahora las coincidencias de comprobación de crc 32 coinciden en Java e iOS

 NSString *filePath = [[NSBundle mainBundle] pathForResource:@"myimage" ofType:@"jpg"]; NSData *fileData = [NSData dataWithContentsOfFile:filePath]; uLong crc = crc32(0L, Z_NULL, 0); long long checksum = crc32(crc, [fileData bytes], [fileData length]); 

Intereting Posts