Cómo ver documentos de Word usando el algoritmo hash
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 $
************************************* ** *******************************************
* p>
* Descripción:
* Esta clase implementa el estándar de hash seguro definido en FIPS PUB 180-1 publicado el 17 de abril de 1995
* p>
*
* 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
* .
*