Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo ver documentos de Word usando el algoritmo hash

Cómo ver documentos de Word usando el algoritmo hash

Hash, generalmente traducido como "hash", también traducido literalmente como "valor hash", consiste en convertir una entrada de cualquier longitud (también llamada pre-mapeo, pre-imagen) en una salida de longitud fija a través de un algoritmo hash, y el salida Ese es el valor hash. Esta transformación es un mapeo comprimido, es decir, el espacio de los valores hash suele ser mucho más pequeño que el espacio de las entradas, diferentes entradas se pueden convertir en la misma salida y el valor de entrada no se puede determinar de forma única a partir del valor hash. Un hash criptográfico también se conoce como "resumen de mensaje".

MD5 y SHA1 son posiblemente los algoritmos hash más utilizados en la actualidad y ambos están basados ​​en MD4. Para obtener descripciones detalladas de los algoritmos MD4 (RFC 1320) y MD5 (RFC 1321) y su código fuente C, consulte los documentos RFC correspondientes.

La siguiente es la implementación del algoritmo SHA1:

/*

* sha1.h

*

* Copyright (C) 1998, 2009

* Paul E. Jones lt; paulej@packetizer.comgt;

* Todos los derechos reservados

*

********************************************* ** *******************************

* $Id.h 12 2009-06- 22 19 :34:25Z paulej $

************************************* ** *******************************************

*

* Descripción:

* Esta clase implementa el estándar de hash seguro definido en FIPS PUB 180-1 publicado el 17 de abril de 1995

*

*

* Muchos nombres de variables en SHA1Context, especialmente los nombres de un solo carácter, son nombres utilizados en esta publicación

*.

*

* Lea el archivo sha1.c para obtener más información.

*

*/

#ifndef _SHA1_H_

# define _SHA1_H_

/*

* Esta estructura contendrá el hash

*Información contextual de la operación

*/

typedef struct SHA1Context

{

unsigned Message_Digest[5] /* Resumen del mensaje (salida) */

unsigned Longitud_Low /* Longitud del mensaje en bits*/

unsigned Longitud_Alta; /* Longitud del mensaje en bits*/

unsigned char Message_Block[64]; /* Bloque de mensajes de 512 bits*/

int Message_Block _Index /* Índice del bloque de mensajes de la matriz; */

int Calculado; /* ¿Se ha calculado el resumen? */

int Corrupted; /* ¿Está dañado el resumen del mensaje?

}SHA1Context;

/*

* Prototipo de función

*/

void SHA1Reset(SHA1Context *

int SHA1Result( SHA1Context *);

void SHA1Input( SHA1Context *,

const unsigned char *,

unsigned) ;

#endif

/*

* sha1.c

*

* Copyright (C ) 1998, 2009

* Paul E. Jones lt; paulej@packetizer.comgt;

* Todos los derechos reservados

*

* ************************************************* * **************************

* $Id: sha1.c 12 2009-06-22 19:34 : 25Z paulej $

******** ******************************* * *****************************************

*

* Descripción:

* Este archivo implementa el estándar de hash seguro definido en FIPS PUB 180-1, publicado el 17 de abril de 1995.

*

* El estándar Secure Hash utiliza el algoritmo Secure Hash

* (SHA) para generar un resumen de mensajes de 160 bits para un flujo de datos determinado. Teóricamente,

* la probabilidad de que dos mensajes produzcan un resumen de mensaje de 160 bits para un flujo de datos determinado es extremadamente baja.

* Dos mensajes producirán el mismo resumen de mensaje. Por lo tanto,

* el algoritmo se puede utilizar como una forma de proporcionar una "huella digital" para un mensaje

*.

*

* Problemas de portabilidad:

* SHA-1 se define en "palabras" de 32 bits. Este código fue

* escrito anticipándose a un procesador con al menos

* un tamaño de palabra de máquina de 32 bits. Si el tamaño de palabra de la máquina fuera mayor, el procesador podría escribir palabras de 32 bits.

* El código aún se ejecuta normalmente.

* Una cosa a tener en cuenta es que obtener caracteres y caracteres

* Las funciones de entrada para matrices suponen que solo hay 8 bits disponibles en la máquina.

* Las matrices suponen que sólo se pueden almacenar 8 bits de información en cada

* carácter.

*

* Notas:

* SHA-1 está diseñado para manejar mensajes de menos de 2^64 bits de longitud

* . Aunque SHA-1 permite generar un resumen de mensajes para

* cualquier mensaje de menos de 2^64 bits de longitud,

* este no es el caso.

*

64, esta

* implementación solo funciona con mensajes que son

* veces la longitud de los caracteres de 8 bits.

*

*

*/<

#include "sha1.h"

/*

* Definir macro de desplazamiento circular

*/

#define SHA1CircularShift(bits, word) \

(((( word) lt ; lt; (bits)) amp; 0xFFFFFFFF) | \

((palabra) gt; gt; (32-(bits))))

/* Prototipo de función* /

void SHA1ProcessMessageBlock(SHA1Context *);

void SHA1PadMessage(SHA1Context *);

/*

* SHA1Reset

*

*

* Descripción:

* Esta función inicializará SHA1Context para prepararse para calcular un nuevo resumen de mensaje

* .

*