¿Cómo hacer un programa que calcula una suma de comprobación de un archivo? ¿Cuál es el proceso exacto de cálculo de una suma de comprobación?
¿Cómo hacer un programa que calcula una suma de comprobación de un archivo? ¿Cuál es el proceso exacto de cálculo de una suma de comprobación?
Las sumas de comprobación son simplemente números que ayudan a verificar que un conjunto particular de datos (un archivo, por ejemplo) no ha cambiado desde la última vez que se verificó. Puedo crear un mensaje aquí, calcular la suma de control es 42, luego enviarte el mensaje. Calcula la suma de comprobación del mensaje que recibió, y si también obtiene el mismo número que le dije (42), tiene más confianza en que los dos mensajes son idénticos. Decimos que se preservó la integridad del mensaje.
Pero las sumas de comprobación son operaciones matemáticas, entonces, ¿cómo funcionan en cosas como documentos de palabras, letras e imágenes? Tenga en cuenta que un archivo (o cualquier conjunto de datos) es solo una colección de bytes en una computadora. No importa si se trata de un archivo de texto, una hoja de cálculo o una imagen digital, es solo una serie de bytes. Y todos los bytes son solo números, solo significan cosas como letras e imágenes cuando usamos programas para mostrarlos de esa manera. (Algunas traducciones comunes de texto a números que puede haber escuchado incluyen ASCII y Unicode).
Lo importante es que para una computadora, cualquier archivo es solo una serie de números. Y eso es útil para hacer que una rutina de comprobación funcione.
La creación del tipo de suma de comprobación más simple se puede hacer agregando literalmente cada byte de un archivo e imprimiendo la suma total de todos los bytes. Si tengo un archivo que contiene los cinco bytes que representan a HELLO utilizando ASCII, la suma de comprobación que utiliza este enfoque simple sería 72 + 69 + 76 + 76 + 79 = 372.
Sin embargo, eso no es una suma de comprobación muy buena. Recuerda, queremos asegurarnos de que el archivo no haya cambiado. Pero si reorganizo esas mismas letras en una palabra diferente, como HOLLE o OHELL, la suma de control sigue siendo 372. Incluso podría reemplazar las letras con otras letras que sumen la misma suma. Así que la mayoría de los algoritmos de suma de comprobación hacen algo para tener en cuenta el orden de los bytes. Un algoritmo de suma de comprobación simple en uso muy común hoy en día se denomina algoritmo de Luhn . Utiliza un multiplicador que duplica a todos los demás personajes. Se utilizan en prácticamente todos los números de cuenta de las tarjetas de crédito para asegurarse de que alguien no cometa un error al ingresar el número de la tarjeta de crédito en una computadora.
(En el caso del algoritmo de Luhn, en lugar de decirle la suma de comprobación en un mensaje separado, se agrega un dígito adicional al número de cuenta para hacer que la suma de comprobación del algoritmo sea igual a cero. Cualquiera que quiera validar el crédito el número de tarjeta ingresado correctamente solo suma todos los dígitos de la manera apropiada, usa la división de módulo entre 10 en la suma y asegura que su resultado sea cero.)
Así es como tendrás que hacer tu programa. Determine un algoritmo de suma de comprobación adecuado, lea un archivo, calcule la suma de comprobación a medida que avanza, luego, cuando haya llegado al final del archivo, imprima la suma de comprobación y salga.
Por suma de comprobación probablemente te refieras al hashing.
Las bibliotecas de hash están disponibles en prácticamente todos los lenguajes de programación. Dependiendo de cómo quiera usarlo, también podría usarlo en un script de shell (bash o Powershell, por ejemplo).
Todos ellos hacen lo mismo. Toma tu archivo como entrada y escupe el hash. Por ejemplo, en un script de shell:
md5sum myfile
sha25sum myfile
En python (una pregunta similar aquí en StackOverflow : ¡mire la respuesta, no el ejemplo de la pregunta!):
import hashlib
myhash=hashlib.md5(open('path_to_myfile', 'rb').read()).hexdigest()
Lea otras preguntas en las etiquetas authentication hash md5 sha sha256