×

扫描二维码登录本站

QQ登录

只需一步,快速开始

加密与解密

标签: 暂无标签
C语言实现MD5算法:????
??#ifndef??_MD5_H??
??#define??_MD5_H??
??#ifndef??PROTOTYPES??
??# if??__STDC__??
??#?? define??PROTOTYPES??1??
??# else??
??#?? define??PROTOTYPES??0??
??# endif??
??#endif??
??typedef?? unsigned?? char?? *POINTER;??
??typedef?? unsigned?? short?? int?? UINT2;??
??#if??defined(__alpha) && (defined(__osf__) || defined(__linux__))??
??typedef?? unsigned?? int?? UINT4;??
??#else??
??typedef?? unsigned?? long?? int?? UINT4;??
??#endif??
??#if?? PROTOTYPES??
??#define?? PROTO_LIST(list)?? list??
??#else??
??#define?? PROTO_LIST(list)?? ()??
??#endif????
??typedef?? struct?? {??
??????UINT4?? state[4];??????????????????????????????????????????????????????????
??????UINT4?? count[2];????????????????
??????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?? *,?? uns???????? igned?? char*));
??#endif??
????
??#include?? "md5.h"??
??#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??
??void?? MD5Transform?? PROTO_LIST?? ((UINT4?? [4],?? unsigned?? char?? [64]));
??void?? Encode?? PROTO_LIST??
????????((unsigned?? char?? *,?? UINT4?? *,?? unsigned?? int));??
??void?? Decode?? PROTO_LIST??
????????((UINT4?? *,?? unsigned?? char?? *,?? unsigned?? int));??
??void?? MD5_memcpy?? PROTO_LIST?? ((POINTER,?? POINTER,?? unsigned?? int));??
??void?? MD5_memset?? PROTO_LIST?? ((POINTER,?? int,?? unsigned?? int));??
??#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)))??
??#define?? ROTATE_LEFT(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);?????? }??
??void?? MD5Init?? (context)??
??MD5_CTX?? *context;????????????????????????????????????????????????????????????
??{??
??????context->count[0]?? =?? context->count[1]?? =?? 0;??
??????context->state[0]?? =?? 0x67452301;??
??????context->state[1]?? =?? 0xefcdab89;??
??????context->state[2]?? =?? 0x98badcfe;??
??????context->state[3]?? =?? 0x10325476;??
??}??
??void?? MD5Update?? (context,?? input,?? inputLen)??
??MD5_CTX?? *context;??????????????????????????????????????????????????????????
??unsigned?? char?? *input;????????????????????????????????????????????????????
??unsigned?? int?? inputLen;????????????????????????????????????????????
??{?? unsigned?? int?? i,?? index,?? partLen;??
??????index?? =?? (unsigned?? int)((context->count[0]?? >>?? 3)?? &?? 0x3F);??
??????if?? ((context->count[0]?? +=?? ((UINT4)inputLen?? count[1]++;??
?????????? context->count[1]?? +=?? ((UINT4)inputLen?? >>?? 29);??
?????????? partLen?? =?? 64?? -?? index;??
???????? if?? (inputLen?? >=?? partLen)?? {??
????MD5_memcpy??
????????((POINTER)&context->buffer[index],?? (POINTER)input,?? partLen);??
????MD5Transform?? (context->state,?? context->buffer);??
????for?? (i?? =?? partLen;?? i?? +?? 63?? state,?? &input);??
????index?? =?? 0;??
??????}??
??????else??
????i?? =?? 0;??
??????MD5_memcpy??
????((POINTER)&context->buffer[index],?? (POINTER)&input,??
??????inputLen-i);??
??}??
??void?? MD5Final?? (digest,?? context,?? padding?? )??
??unsigned?? char?? digest[16];????????????????????????????????????????????????
??MD5_CTX?? *context;??????????????????????????????????????????????????????????
??unsigned?? char?? *padding;??
??{?? unsigned?? char?? bits[8];??
??????unsigned?? int?? index,?? padLen;??
??????Encode?? (bits,?? context->count,?? 8);??
??????index?? =?? (unsigned?? int)((context->count[0]?? >>?? 3)?? &?? 0x3f);??
??????padLen?? =?? (index?? state,?? 16);??
??????MD5_memset?? ((POINTER)context,?? 0,?? sizeof?? (*context));??
??}??
??void?? MD5Transform?? (state,?? block)??
??UINT4?? state[4];??
??unsigned?? char?? block[64];??
??{??
??????UINT4?? a?? =?? state[0],?? b?? =?? state[1],?? c?? =?? state[2],?? d?? =?? state[3],?? x[16];??
??????Decode?? (x,?? block,?? 64);??
??????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?? */??
??????FF?? (b,?? c,?? d,?? a,?? x[?? 3],?? S14,?? 0xc1bdceee);?? /*?? 4?? */??
??????FF?? (a,?? b,?? c,?? d,?? x[?? 4],?? S11,?? 0xf57c0faf);?? /*?? 5?? */??
??????FF?? (d,?? a,?? b,?? c,?? x[?? 5],?? S12,?? 0x4787c62a);?? /*?? 6?? */??
??????FF?? (c,?? d,?? a,?? b,?? x[?? 6],?? S13,?? 0xa8304613);?? /*?? 7?? */??
??????FF?? (b,?? c,?? d,?? a,?? x[?? 7],?? S14,?? 0xfd469501);?? /*?? 8?? */??
??????FF?? (a,?? b,?? c,?? d,?? x[?? 8],?? S11,?? 0x698098d8);?? /*?? 9?? */??
??????FF?? (d,?? a,?? b,?? c,?? x[?? 9],?? S12,?? 0x8b44f7af);?? /*?? 10?? */??
??????FF?? (c,?? d,?? a,?? b,?? x[10],?? S13,?? 0xffff5bb1);?? /*?? 11?? */??
??????FF?? (b,?? c,?? d,?? a,?? x[11],?? S14,?? 0x895cd7be);?? /*?? 12?? */??
??????FF?? (a,?? b,?? c,?? d,?? x[12],?? S11,?? 0x6b901122);?? /*?? 13?? */??
??????FF?? (d,?? a,?? b,?? c,?? x[13],?? S12,?? 0xfd987193);?? /*?? 14?? */??
??????FF?? (c,?? d,?? a,?? b,?? x[14],?? S13,?? 0xa679438e);?? /*?? 15?? */??
??????FF?? (b,?? c,?? d,?? a,?? x[15],?? S14,?? 0x49b40821);?? /*?? 16?? */??
??????GG?? (a,?? b,?? c,?? d,?? x[?? 1],?? S21,?? 0xf61e2562);?? /*?? 17?? */??
??????GG?? (d,?? a,?? b,?? c,?? x[?? 6],?? S22,?? 0xc040b340);?? /*?? 18?? */??
??????GG?? (c,?? d,?? a,?? b,?? x[11],?? S23,?? 0x265e5a51);?? /*?? 19?? */??
??????GG?? (b,?? c,?? d,?? a,?? x[?? 0],?? S24,?? 0xe9b6c7aa);?? /*?? 20?? */??
??????GG?? (a,?? b,?? c,?? d,?? x[?? 5],?? S21,?? 0xd62f105d);?? /*?? 21?? */??
??????GG?? (d,?? a,?? b,?? c,?? x[10],?? S22,???? 0x2441453);?? /*?? 22?? */??
??????GG?? (c,?? d,?? a,?? b,?? x[15],?? S23,?? 0xd8a1e681);?? /*?? 23?? */??
??????GG?? (b,?? c,?? d,?? a,?? x[?? 4],?? S24,?? 0xe7d3fbc8);?? /*?? 24?? */??
??????GG?? (a,?? b,?? c,?? d,?? x[?? 9],?? S21,?? 0x21e1cde6);?? /*?? 25?? */??
??????GG?? (d,?? a,?? b,?? c,?? x[14],?? S22,?? 0xc33707d6);?? /*?? 26?? */??
??????GG?? (c,?? d,?? a,?? b,?? x[?? 3],?? S23,?? 0xf4d50d87);?? /*?? 27?? */??
??????GG?? (b,?? c,?? d,?? a,?? x[?? 8],?? S24,?? 0x455a14ed);?? /*?? 28?? */??
??????GG?? (a,?? b,?? c,?? d,?? x[13],?? S21,?? 0xa9e3e905);?? /*?? 29?? */??
??????GG?? (d,?? a,?? b,?? c,?? x[?? 2],?? S22,?? 0xfcefa3f8);?? /*?? 30?? */??
??????GG?? (c,?? d,?? a,?? b,?? x[?? 7],?? S23,?? 0x676f02d9);?? /*?? 31?? */??
??????GG?? (b,?? c,?? d,?? a,?? x[12],?? S24,?? 0x8d2a4c8a);?? /*?? 32?? */??
??????HH?? (a,?? b,?? c,?? d,?? x[?? 5],?? S31,?? 0xfffa3942);?? /*?? 33?? */??
??????HH?? (d,?? a,?? b,?? c,?? x[?? 8],?? S32,?? 0x8771f681);?? /*?? 34?? */??
??????HH?? (c,?? d,?? a,?? b,?? x[11],?? S33,?? 0x6d9d6122);?? /*?? 35?? */??
??????HH?? (b,?? c,?? d,?? a,?? x[14],?? S34,?? 0xfde5380c);?? /*?? 36?? */??
??????HH?? (a,?? b,?? c,?? d,?? x[?? 1],?? S31,?? 0xa4beea44);?? /*?? 37?? */??
??????HH?? (d,?? a,?? b,?? c,?? x[?? 4],?? S32,?? 0x4bdecfa9);?? /*?? 38?? */??
??????HH?? (c,?? d,?? a,?? b,?? x[?? 7],?? S33,?? 0xf6bb4b60);?? /*?? 39?? */??
??????HH?? (b,?? c,?? d,?? a,?? x[10],?? S34,?? 0xbebfbc70);?? /*?? 40?? */??
??????HH?? (a,?? b,?? c,?? d,?? x[13],?? S31,?? 0x289b7ec6);?? /*?? 41?? */??
??????HH?? (d,?? a,?? b,?? c,?? x[?? 0],?? S32,?? 0xeaa127fa);?? /*?? 42?? */??
??????HH?? (c,?? d,?? a,?? b,?? x[?? 3],?? S33,?? 0xd4ef3085);?? /*?? 43?? */??
??????HH?? (b,?? c,?? d,?? a,?? x[?? 6],?? S34,???? 0x4881d05);?? /*?? 44?? */
??????HH?? (a,?? b,?? c,?? d,?? x[?? 9],?? S31,?? 0xd9d4d039);?? /*?? 45?? */??
??????HH?? (d,?? a,?? b,?? c,?? x[12],?? S32,?? 0xe6db99e5);?? /*?? 46?? */??
??????HH?? (c,?? d,?? a,?? b,?? x[15],?? S33,?? 0x1fa27cf8);?? /*?? 47?? */??
??????HH?? (b,?? c,?? d,?? a,?? x[?? 2],?? S34,?? 0xc4ac5665);?? /*?? 48?? */??
??????II?? (a,?? b,?? c,?? d,?? x[?? 0],?? S41,?? 0xf4292244);?? /*?? 49?? */??
??????II?? (d,?? a,?? b,?? c,?? x[?? 7],?? S42,?? 0x432aff97);?? /*?? 50?? */??
??????II?? (c,?? d,?? a,?? b,?? x[14],?? S43,?? 0xab9423a7);?? /*?? 51?? */??
??????II?? (b,?? c,?? d,?? a,?? x[?? 5],?? S44,?? 0xfc93a039);?? /*?? 52?? */??
??????II?? (a,?? b,?? c,?? d,?? x[12],?? S41,?? 0x655b59c3);?? /*?? 53?? */??
??????II?? (d,?? a,?? b,?? c,?? x[?? 3],?? S42,?? 0x8f0ccc92);?? /*?? 54?? */??
??????II?? (c,?? d,?? a,?? b,?? x[10],?? S43,?? 0xffeff47d);?? /*?? 55?? */??
??????II?? (b,?? c,?? d,?? a,?? x[?? 1],?? S44,?? 0x85845dd1);?? /*?? 56?? */??
??????II?? (a,?? b,?? c,?? d,?? x[?? 8],?? S41,?? 0x6fa87e4f);?? /*?? 57?? */??
??????II?? (d,?? a,?? b,?? c,?? x[15],?? S42,?? 0xfe2ce6e0);?? /*?? 58?? */??
??????II?? (c,?? d,?? a,?? b,?? x[?? 6],?? S43,?? 0xa3014314);?? /*?? 59?? */??
??????II?? (b,?? c,?? d,?? a,?? x[13],?? S44,?? 0x4e0811a1);?? /*?? 60?? */??
??????II?? (a,?? b,?? c,?? d,?? x[?? 4],?? S41,?? 0xf7537e82);?? /*?? 61?? */??
??????II?? (d,?? a,?? b,?? c,?? x[11],?? S42,?? 0xbd3af235);?? /*?? 62?? */??
??????II?? (c,?? d,?? a,?? b,?? x[?? 2],?? S43,?? 0x2ad7d2bb);?? /*?? 63?? */??
??????II?? (b,?? c,?? d,?? a,?? x[?? 9],?? S44,?? 0xeb86d391);?? /*?? 64?? */??
??????state[0]?? +=?? a;??
??????state[1]?? +=?? b;??
??????state[2]?? +=?? c;??
??????state[3]?? +=?? d;??
??????MD5_memset?? ((POINTER)x,?? 0,?? sizeof?? (x));??
??}??
??void?? Encode?? (output,?? input,?? len)??
??unsigned?? char?? *output;??
??UINT4?? *input;??
??unsigned?? int?? len;??
??{?? unsigned?? int?? i,?? j;??
??????for?? (i?? =?? 0,?? j?? =?? 0;?? j?? >?? 8)?? &?? 0xff);??
????output[j+2]?? =?? (unsigned?? char)((input?? >>?? 16)?? &?? 0xff);??
????output[j+3]?? =?? (unsigned?? char)((input?? >>?? 24)?? &?? 0xff);??
??????}??
??}??
??void?? Decode?? (output,?? input,?? len)??
??UINT4?? *output;??
??unsigned?? char?? *input;??
??unsigned?? int?? len;??
??{?? unsigned?? int?? i,?? j;??
??????for?? (i?? =?? 0,?? j?? =?? 0;?? j?? <?? len;?? i++,?? j?? +=?? 4)??
????output?? =?? ((UINT4)input[j])?? |?? (((UINT4)input[j+1])?? <<?? 8)?? |
????????(((UINT4)input[j+2])?? <<?? 16)?? |?? (((UINT4)input[j+3])?? <<?? 24);
??}??
??void?? MD5_memcpy?? (output,?? input,?? len)??
??POINTER?? output;??
??POINTER?? input;??
??unsigned?? int?? len;??
??{?? unsigned?? int?? i;??
??????for?? (i?? =?? 0;?? i?? <?? len;?? i++)??
????output?? =?? input;??
??}??
??void?? MD5_memset?? (output,?? value,?? len)??
??POINTER?? output;??
??int?? value;??
??unsigned?? int?? len;??
??{????unsigned?? int?? i;??
??????for?? (i?? =?? 0;?? i?? <?? len;?? i++)??
????((char?? *)output)?? =?? (char)value;??
??}??
??void?? calculateMd5Digits(?? char*?? md5buf,?? char*?? passout,?? int?? length?? )??
??{?? MD5_CTX?????????????????? context;??
??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??
??};??
??????????????????MD5Init(&context);??
??????????????????MD5Update(&context,?? md5buf,?? length?? );??
??????????????????MD5Final(passout,?? &context,?? padding?? );??
??}




上一篇:信息安全等级保护管理办法
下一篇:安全加固规范--链接
it168

写了 285 篇文章,拥有财富 1508,被 3 人关注

您需要登录后才可以回帖 登录 | 立即注册
B Color Link Quote Code Smilies
未来之星 发表于 2011-7-21 16:22:00
3.gif 有点晕??O(∩_∩)O"
手机版|小黑屋|最新100贴|论坛版块|ITIL先锋论坛 |粤ICP备11099876号|网站地图
Powered by Discuz! X3.4 Licensed  © 2001-2017 Comsenz Inc.
返回顶部