Red de conocimiento informático - Conocimiento del nombre de dominio - Buscando ansiosamente el código fuente del algoritmo de cifrado y descifrado MD5, implementado en C++. ¡Gracias por la puntuación alta!

Buscando ansiosamente el código fuente del algoritmo de cifrado y descifrado MD5, implementado en C++. ¡Gracias por la puntuación alta!

¿Quieres código o documentación relacionada?

--------------------------------

Código requerido:

Dos archivos:

--------------------------

1 md5.h:

#pragma once

typedef unsigned long int UINT32;

typedef unsigned short int UINT16;

/* Contexto MD5.*/

typedef struct {

UINT32 estado[4] /* estado (ABCD) */

UINT32 recuento[2] ; * Número de dígitos, módulo 2^64 (lsb tiene prioridad) */

unsigned char buffer[64] /* input buffer */

}MD5_CTX;

void MD5Init (MD5_CTX *);

void MD5Update (MD5_CTX *, unsigned char *, unsigned int);

void MD5Final (unsigned char [16], MD5_CTX * ) ;

--------------------------

2.md5.cpp:

p>

#include "md5.h"

#include "memoria.h"

#define S11 7

#define S12 12< / p>

#definir S13 17

#definir S14 22

#definir S21 5

#definir S22 9

# definir S23 14

#definir S24 20

#definir S314

#definir S32 11

#definir S33 16

#definir S34 23

#definir S41 6

#definir S42 10

#definir S43 15

#definir S44 21

Static void MD5Transform (UINT32 a[4], unsigned char b[64]);

static void Encode (unsigned char*, UINT32 *, unsigned int);

Decodificación vacía estática (UINT32 *, carácter sin firmar *, int sin signo);

Carbón estático sin signo PADDING[64] = {

0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0,

#define F(x, y, z) (((x) & (y))| ((~ x) & (z)))

#define G(x, y, z) (((x) & (z)))|

(~z)))

#definir H(x, y, z) ((x) ^ (y) ^ (z))

#definir I(x, y , z) ((y) ^ ((x) | (~z)))

#define ROTATE_LEFT(x, n) (((x) << (n)))| ) >> (32- (n))))

#define FF(a, b, c, d, x, s, ac) { \

(a) + = F ((b), (c), (d)) + (x) + (UINT32)(ac \

(a) = ROTATE_LEFT ((a), (s)); \

(a) += (b); \

}

#define GG(a, b, c, d, x, s, ac) ) { \

(a) += G ((b), (c), (d)) + (x) + (UINT32)(ac); a) = ROTATE_LEFT ((a), (s)); \

(a) += (b); (a, b, c, d, x, s, ac) { \

(a) += H ((b), (c), (d)) + (x) + (UINT32 )(ac); \

(a) = ROTATE_LEFT ((a), (s)) ; \

(a) += (b);

}

#define II(a, b, c, d, x, s, ac) { \

(a) += I ((b), ( c), (d)) + (x) + (UINT32)(ac);\

(a) = ROTATE_LEFT (( a), (s)); (a) += (b); \

}

void MD5Init (MD5_CTX *contexto)

{

contexto-> ;cuenta[0] = contexto->cuenta[1] = 0;

contexto->estado[0] = 0x67452301;

contexto->estado[1] = 0xefcdab89;

contexto->estado[2] = 0x98badcfe;

contexto- > estado[3] = 0x10325476;

}

void MD5Update (MD5_CTX *context, unsigned char *entrada, unsigned int inputLen)

{

unsigned int i, index, partLen;

index = (unsigned int)((context-> count[0] >> 3) & 0x3F);

if ((context->count[0] += ( (UINT32)inputLen << 3))

< ((UINT32)inputLen << 3))

contexto->cuenta[1]++;

contexto->cuenta

t[1]+= (( UINT32)inputLen >> 29);

partLen = 64 - índice;

if (inputLen >= partLen) {

memcpy((unsigned char *)&context->.buffer[index], (unsigned char *)entrada, partLen);

MD5Transform (contexto->estado, contexto->buffer);

for (i = partLen; i + 63 < ; inputLen; i += 64)

MD5Transform (contexto->estado, &input[i]);

índice = 0;

}

else

i = 0;

memcpy(( unsigned char *)&context->buffer[index ], (carácter sin firmar *)&input[i],

inputLen-i);

}

void MD5Final (resumen de caracteres sin firmar[16], MD5_CTX * contexto)

{

bits de caracteres sin firmar[8];

índice int sin signo, padLen;

Codificar (bits, contexto ->.count, 8);

index = (unsigned int)((context->count[0] >> 3) & 0x3f);

padLen = (index < 56) ?(56 - índice): (120 - índice);

MD5Update (contexto, PADDING, padLen);

MD5Update (contexto, bits, 8);

Codificar (resumen, contexto->.state, 16);

memset ((unsigned char *)context, 0, sizeof (*context));

}

MD5Transform vacío estático (estado UINT32[4], bloque de caracteres sin firmar[64])

{

UINT32 a = estado[0], b = estado [1], c = estado[2], d = estado[3], x[16];

decode(x, block, 64);

/* 1.ª ronda */

FF (a, b, c, d, x[ 0], S11, 0xd76aa478 /* 1 */

FF (d, a, b, c); , x[ 1], S12, 0xe8c7b756); /* 2 */

FF (c, d, a, b, x[ 2], S13, 0x242070db /* 3 */< /); p>

Decodificar(x, bloque, 64);

/* Ronda 1*/

上篇: ¿Es bueno un teléfono móvil con una pantalla ligeramente curvada? 下篇: ¿Cuáles son los tres tipos de inventario de repuestos? Investigación académica sobre métodos de partición del inventario de repuestos de equipos en grandes empresas Investigación sobre métodos de clasificación del inventario de repuestos de equipos en grandes empresas/Huang Geng, Song Yingjie, Sun Weifeng, Li Suhong Resumen: La gestión de repuestos es una parte importante de la gestión de equipos y el almacenamiento científico y razonable de las piezas de repuesto son una garantía importante para la continuidad de la producción. El método de clasificación de repuestos de las grandes empresas es relativamente antiguo y no es adecuado para la gestión empresarial moderna. Este artículo propone un nuevo método de clasificación tridimensional, que proporciona una solución eficaz para que las empresas reduzcan costos y aumenten la eficiencia. Palabras clave: repuestos; método de clasificación: método de clasificación tridimensional Introducción La gestión de repuestos de equipos pertenece a la categoría de logística empresarial. En las grandes empresas, los equipos son voluminosos y de estructura compleja, por lo que los tipos y cantidades de repuestos serán diversos, lo que ocupa una gran cantidad de capital de trabajo. Una buena gestión logística de los repuestos de equipos se ha convertido en una forma importante para que las grandes empresas reduzcan costos. y aumentar la eficiencia. Con el avance de la tecnología industrial, la gestión de la logística de repuestos ha ido atrayendo gradualmente la atención y la comprensión del personal técnico. Al mismo tiempo, con el rápido desarrollo de la tecnología industrial, la gestión logística de repuestos se enriquecerá y perfeccionará en teoría y práctica, sentando una buena base para toda la gestión de equipos. Clasificación de repuestos de equipos según los métodos de mantenimiento del equipo. Los repuestos se pueden dividir en repuestos de accidentes, repuestos de mantenimiento planificados, repuestos de desgaste, etc. Según los métodos de mantenimiento de equipos, los repuestos se pueden dividir en repuestos de accidentes, repuestos de mantenimiento planificados y repuestos de desgaste. , etc. Las piezas de accidente se refieren principalmente al método de mantenimiento de las piezas de repuesto que se utilizan cuando falla el equipo. Hay dos tipos de repuestos para accidentes: uno son los repuestos para accidentes estándar, que son repuestos para equipos (disponibles en el mercado) que se pueden ver en todas partes en los estantes de almacenamiento. Este tipo de repuestos para equipos son fáciles de comprar pero el ciclo de reemplazo es difícil de predecir, por lo que puede prepararlos tanto como sea posible o no. El otro son repuestos especiales para accidentes, que se refieren principalmente a algunos repuestos para equipos que no se pueden reemplazar; en tiempos normales y el ciclo de reemplazo es difícil de predecir. Una vez dañado, causará un mayor daño a la producción. Por ejemplo, los botones de la consola, los tornillos y tuercas del equipo, los interruptores de proximidad, etc. son piezas estándar para accidentes, mientras que las válvulas proporcionales del codificador de impulsos, etc., son piezas especiales para accidentes. Las piezas de mantenimiento planificadas se refieren a equipos que se someten a mantenimiento preventivo según lo planificado. Las piezas de repuesto de equipos que se reemplazan en un ciclo de mantenimiento razonable en función de sus condiciones de funcionamiento son piezas de mantenimiento planificadas. Por ejemplo, los rodamientos de los laminadores en frío son piezas de mantenimiento planificadas, también conocidas como piezas consumibles, se refieren a aquellas irregulares y. Grandes cantidades de piezas que comúnmente se dañan también son piezas de repuesto de equipos que son elegibles para reemplazo. Los consumibles son repuestos que se pueden reemplazar rápidamente durante la inspección general y el mantenimiento del equipo. Los consumibles tienen bajo contenido técnico, gran consumo, rápida rotación y son fáciles de comprar, por ejemplo, fusibles de potencia, seguros, sellos hidráulicos, caucho. etc. son todas piezas consumibles. Método de clasificación de inventario ABC de uso común El método de clasificación más utilizado en el control de inventario es el método de clasificación ABC, también conocido como método de clasificación de Pareto. Su idea básica es dividir los objetos de gestión en tres categorías ABC de acuerdo con los indicadores de clasificación mediante análisis cualitativo y cuantitativo. análisis y luego adoptar las estrategias de control correspondientes. En el trabajo real, el estándar de clasificación ABC es el consumo anual de cada tipo de repuestos de equipos en stock, es decir, el producto del consumo por el precio unitario. En términos generales, la categoría A representa el 5% del número de variedades, el 10% del consumo total anual, el 60% del consumo total anual y el 70% del total de repuestos de equipos. Para este tipo de repuestos se deben realizar esfuerzos. Se debe hacer para reducir la acumulación de pedidos Rouge Shenzhen 7. Los lotes de productos y las existencias de seguridad deben reducirse tanto como sea posible para evitar desabastecimientos, y es necesario fortalecer la supervisión del inventario. Los repuestos para equipos de clase b representan el 20% del número total de variedades, el 30% del monto total y el consumo anual representa el 20% del monto total. Para este tipo de repuestos para equipos, el lote de pedido puede ser adecuado. aumenta, la cantidad del pedido se puede aumentar adecuadamente y luego se pueden adoptar las estrategias de control correspondientes. La categoría C representa del 50 al 70 del total de variedades y menos del 15 del consumo anual de repuestos de equipos, lo que puede aumentar aún más la cantidad de pedidos y extender el ciclo de pedidos. La clasificación ABC ayuda a distinguir puntos clave y cuidar lo general, por lo que se usa ampliamente. Sin embargo, sus deficiencias también son muy obvias. Los criterios de valoración no son exhaustivos y es difícil clasificarlos científicamente sólo por tipo y cantidad. Por ejemplo, algunos repuestos de equipos, aunque ocupan una cantidad pequeña, tienen un mayor impacto en la producción y el ciclo de recolección es largo. obviamente deberían clasificarse en la categoría A, pero según la cantidad estándar se pueden clasificar en la Categoría B o en la Categoría C. Método de clasificación tridimensional mejorado del inventario de repuestos Debido a las limitaciones del método de categoría y subcategoría ABC9, aquí proponemos un método de clasificación tridimensional de repuestos de equipos: De acuerdo con las características de los repuestos de equipos de grandes empresas, se puede clasificar desde la importancia hasta la producción y la ocupación. La cantidad de fondos y la duración del ciclo de adquisición y transporte se consideran de manera integral para llevar a cabo la clasificación tridimensional, que se denomina método de clasificación tridimensional de equipos y repuestos.