µÚÒ»·¶ÎÄÍø - רҵÎÄÕ·¶ÀýÎĵµ×ÊÁÏ·ÖÏíÆ½Ì¨

MD5 ±¨ÎÄÕªÒªËã·¨Ô´Âë

À´Ô´£ºÓû§·ÖÏí ʱ¼ä£º2025/5/29 9:07:48 ±¾ÎÄÓÉloading ·ÖÏí ÏÂÔØÕâÆªÎĵµÊÖ»ú°æ
˵Ã÷£ºÎÄÕÂÄÚÈݽö¹©Ô¤ÀÀ£¬²¿·ÖÄÚÈÝ¿ÉÄܲ»È«£¬ÐèÒªÍêÕûÎĵµ»òÕßÐèÒª¸´ÖÆÄÚÈÝ£¬ÇëÏÂÔØwordºóʹÓá£ÏÂÔØwordÓÐÎÊÌâÇëÌí¼Ó΢ÐźÅ:xxxxxxx»òQQ£ºxxxxxx ´¦Àí£¨¾¡¿ÉÄܸøÄúÌṩÍêÕûÎĵµ£©£¬¸ÐлÄúµÄÖ§³ÖÓëÁ½⡣

±¾¸½Â¼°üÀ¨ÒÔÏÂÎļþ£º£¨Õª×ÔRSAREF: A Cryptographic Toolkit for Privacy-Enhanced Mail:£© global.h £­ È«¾ÖÍ·Îļþ md5.h -- MD5Í·Îļþ md5c.c -- MD5Ô´´úÂë

£¨ÒªµÃµ½¸ü¶àµÄRSAREFÐÅÏ¢£¬Çë·¢e-maiµ½: .£© ¸½Â¼Öл¹°üÀ¨£º

mddriver.c£­MD2, MD4 and MD5µÄ²âÊÔÇý¶¯³ÌÐò¡£ Çý¶¯³ÌÐòĬÈÏÇé¿öϱàÒëMD5£¬µ«Èç¹ûÔÚCµÄ±àÒëÃüÁîÐн«MD5²ÎÊýÉè³É2»ò4£¬ÔòÒ²¿ÉÒÔ±àÒë MD2ºÍMD4

´ËÓ¦ÓóÌÐòÊÇ·½±ãʹÓõģ¬¿ÉÓÃÔÚ²»Í¬µÄƽ̨ÉÏ£¬ÔÚÌØÊâµÄƽ̨ÉÏÓÅ»¯ËüÒ²²¢²»À§ÄÑ£¬ÕâÁô¸ø¶Á

Õß×÷ΪÁ·Ï°¡£ÀýÈ磬ÔÚ¡°little-endian¡±Æ½Ì¨ÉÏ£¬´Ëƽ̨32λ×ÖµÄ×îµÍµØÖ·×Ö½Ú×îÎÞÒâÒåµÄ×Ö½Ú£¬

²¢ÇÒûÓжÓÁÐÏÞÖÆ£¬ÔÚMD5±ä»»ÖеĽâÂëµÄÃüÁîµ÷ÓÿÉÒÔ±»ÏàÓ¦µÄÀàÐÍÌæ´ú¡£ A1 global.h

/* GLOBAL.H - RSAREF ÀàÐͺͳ£Êý*/

/* µ±ÇÒ½öµ±±àÒëÆ÷Ö§³Öº¯ÊýÔ­Ð͵ÄÉùÃ÷ʱ£¬PROTOTYPES±ØÐë±»ÉèÖÃÒ»´Î Èç¹û»¹Ã»Óж¨ÒåC±àÒëÆ÷µÄ±ê¼Ç£¬ÏÂÃæµÄ´úÂëʹPROTOTYPESÖÃΪ0¡£*/ #ifndef PROTOTYPES #define PROTOTYPES 0 #endif

/* POINTER ¶¨Òå³ÉÒ»¸öÆÕͨµÄÖ¸ÕëÀàÐÍ */ typedef unsigned char *POINTER;

/* UINT2 ¶¨Òå³ÉÁ½×Ö½ÚµÄ×Ö */

typedef unsigned short int UINT2;

/* UINT4¶¨Ò»³ÉËÄ×Ö½ÚµÄ×Ö */ typedef unsigned long int UINT4; /* PROTO_LISTµÄ¶¨ÒåÒÀÀµÓÚÉÏÃæPROTOTYPESµÄ¶¨Ò壬Èç¹ûʹÓÃÁËPROTOTYPES£¬ÄÇô

PROTO_LIST·µ»Ø´ËÁÐ±í£¬·ñÔò·µ»ØÒ»¸ö¿ÕÁÐ±í¡£*/ #if PROTOTYPES

#define PROTO_LIST(list) list #else

#define PROTO_LIST(list) () #endif A.2 md5.h

/*MD5.H - MD5C.CÍ·Îļþ*/

/*±¾Èí¼þÔÊÐí±»¸´ÖÆ»òÔËÓ㬵«±ØÐëÔÚËùÓÐÌá¼°ºÍ²Î¿¼µÄµØ·½±ê×¢¡°RSA Data

Security, Inc. MD5 Message-Digest Algorithm¡±£¬Ò²ÔÊÐí²úÉú»òÔËÓÃÅÉÉúÈí¼þ£¬µ«±ØÐëÔÚËùÓÐÌá¼°ºÍ²Î¿¼µÄµØ·½±êÃ÷ ¡°derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm¡± RSAÊý¾Ý°²È«¹«Ë¾£¨RSA Data Security, Inc.£©´ÓÀ´Ã»ÓгöÓÚÈκÎÌØ¶¨Ä¿µÄ³ÂÊö¹ý¹ØÓÚ´Ë

Èí¼þµÄ¿ÉÂòÐÔºÍʵÓÃÐÔ£¬ËüÌṩÁË¡°as is¡±,ûÓбí´ï»ò°µÊ¾¹ýÈκÎÀíÓÉ¡£ ´ËÉùÃ÷±ØÐëÔÚÈκδËÎļþºÍÈí¼þµÄÈκο½±´Öб£Áô¡£*/

/* MD5 context. */ typedef struct {

UINT4 state[4]; /* state (ABCD) */ UINT4 count[2]; /* λÊýÁ¿, Ä£ 2^64 (µÍλÔÚǰ) */

unsigned char buffer[64]; /* ÊäÈ뻺³åÆ÷ */ } MD5_CTX;

void MD5Init PROTO_LIST ((MD5_CTX *)); void MD5Update PROTO_LIST

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

void MD5Final PROTO_LIST ((unsigned char [16], MD5_CTX *)); A.3 md5c.c

/* MD5C.C ¨C RSAÊý¾Ý°²È«¹«Ë¾£¬MD5±¨ÎÄÕªÒªËã·¨*/

/*±¾Èí¼þÔÊÐí±»¸´ÖÆ»òÔËÓ㬵«±ØÐëÔÚËùÓÐÌá¼°ºÍ²Î¿¼µÄµØ·½±ê×¢¡°RSA Data Security, Inc. MD5 Message-Digest Algorithm¡±Ò²ÔÊÐí²úÉú»òÔËÓÃÅÉÉúÈí¼þ£¬µ«±ØÐëÔÚËùÓÐÌá¼°ºÍ²Î¿¼µÄµØ·½±êÃ÷

¡°derived from the RSA Data RSAÊý¾Ý°²È«¹«Ë¾£¨RSA Data Security, Inc.£©´ÓÀ´Ã»ÓгöÓÚÈκÎ

ÌØ¶¨Ä¿µÄ³ÂÊö¹ý¹ØÓÚ´ËÈí¼þµÄ¿ÉÂòÐÔºÍʵÓÃÐÔ£¬ËüÌṩÁË¡°as is¡±,ûÓбí´ï»ò°µÊ¾¹ýÈκÎÀíÓÉ¡£

´ËÉùÃ÷±ØÐëÔÚÈκδËÎļþºÍÈí¼þµÄÈκο½±´Öб£Áô¡£*/

#include \#include \

/* Constants for MD5Transform routine. */

#define S11 7 #define S12 12 #define S13 17 #define S14 22

#define S21 5 #define S22 9 #define S23 14 #define S24 20 #define S31 4 #define S32 11 #define S33 16 #define S34 23 #define S41 6 #define S42 10 #define S43 15 #define S44 21

static void MD5Transform PROTO_LIST ((UINT4 [4], unsigned char [64])); static void Encode PROTO_LIST

((unsigned char *, UINT4 *, unsigned int)); static void Decode PROTO_LIST

((UINT4 *, unsigned char *, unsigned int));

static void MD5_memcpy PROTO_LIST ((POINTER, POINTER, unsigned int)); static void MD5_memset PROTO_LIST ((POINTER, int, unsigned int));

static unsigned char 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, 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 };

/* F, G, H ºÍ I ÊÇ»ù±¾MD5º¯Êý */

#define F(x, y, z) (((x) & (y)) | ((~x) & (z))) #define G(x, y, z) (((x) & (z)) | ((y) & (~z))) #define H(x, y, z) ((x) ^ (y) ^ (z)) #define I(x, y, z) ((y) ^ ((x) | (~z)))

/* ROTATE_LEFT ½«xÑ­»·×óÒÆnλ */

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

/* Ñ­»·´Ó¼Ó·¨ÖзÖÀë³öÊÇΪÁË·ÀÖ¹ÖØ¸´¼ÆËã*/ #define FF(a, b, c, d, x, s, ac) { \\

(a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \\ (a) = ROTATE_LEFT ((a), (s)); \\ (a) += (b); \\ }

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

(a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \\

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

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

(a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \\ (a) = ROTATE_LEFT ((a), (s)); \\ (a) += (b); \\ }

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

(a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \\ (a) = ROTATE_LEFT ((a), (s)); \\ (a) += (b); \\ }

/* MD5 ³õʼ»¯. ¿ªÊ¼Ò»¸öMD5²Ù×÷дһ¸öеÄcontext. */ void MD5Init (context)

MD5_CTX *context; /* context */ {

context->count[0] = context->count[1] = 0; context->state[0] = 0x67452301; context->state[1] = 0xefcdab89; context->state[2] = 0x98badcfe; context->state[3] = 0x10325476; }

/*MD5 ·Ö×é¸üвÙ×÷. ¼ÌÐøÒ»¸öMD5²Ù×÷,´¦ÀíÁíÒ»¸öÏûÏ¢·Ö×é²¢¸üÐÂcontext. */

void MD5Update (context, input, inputLen)

MD5_CTX *context; /* context */ unsigned char *input; /* ÊäÈë·Ö×é*/ unsigned int inputLen; /* ÊäÈëµÄ·Ö×éµÄ³¤¶È */ {

unsigned int i, index, partLen;

/* ¼ÆËã×Ö½ÚÊýÄ£64µÄÖµ */

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

/* Update number of bits */

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

< ((UINT4)inputLen << 3)) context->count[1]++;

context->count[1] += ((UINT4)inputLen >> 29);

ËÑË÷¸ü¶à¹ØÓÚ£º MD5 ±¨ÎÄÕªÒªËã·¨Ô´Âë µÄÎĵµ
MD5 ±¨ÎÄÕªÒªËã·¨Ô´Âë.doc ½«±¾ÎĵÄWordÎĵµÏÂÔØµ½µçÄÔ£¬·½±ã¸´ÖÆ¡¢±à¼­¡¢ÊղغʹòÓ¡
±¾ÎÄÁ´½Ó£ºhttps://www.diyifanwen.net/c10y1048lj46i8ss1cmts_2.html£¨×ªÔØÇë×¢Ã÷ÎÄÕÂÀ´Ô´£©
ÈÈÃÅÍÆ¼ö
Copyright © 2012-2023 µÚÒ»·¶ÎÄÍø °æÈ¨ËùÓÐ ÃâÔðÉùÃ÷ | ÁªÏµÎÒÃÇ
ÉùÃ÷ :±¾ÍøÕ¾×ðÖØ²¢±£»¤ÖªÊ¶²úȨ£¬¸ù¾Ý¡¶ÐÅÏ¢ÍøÂç´«²¥È¨±£»¤ÌõÀý¡·£¬Èç¹ûÎÒÃÇ×ªÔØµÄ×÷Æ·ÇÖ·¸ÁËÄúµÄȨÀû,ÇëÔÚÒ»¸öÔÂÄÚ֪ͨÎÒÃÇ£¬ÎÒÃǻἰʱɾ³ý¡£
¿Í·þQQ£ºxxxxxx ÓÊÏ䣺xxxxxx@qq.com
ÓåICP±¸2023013149ºÅ
Top