當前位置:編程學習大全網 - 源碼下載 - 文本加密和解密源代碼

文本加密和解密源代碼

要代碼還是要相關說明材料?

-

要編碼:

兩個文件:

-

1.md5.h:

#雜註壹次

typedef無符號長整型UINT32

typedef無符號短整型uint 16;

/* MD5上下文。*/

typedef結構{

UINT32狀態[4];/*狀態(ABCD) */

UINT32計數[2];/*位數,模2^64 (lsb優先)*/

無符號字符緩沖區[64];/*輸入緩沖器*/

} MD5 _ CTX;

void MD5 init(MD5 _ CTX *);

void MD5Update (MD5_CTX *、無符號char *、無符號int);

void MD5 final(unsigned char[16],MD5 _ CTX *);

-

2.md5.cpp:

#包含“md5.h”

#包含“memory.h”

#定義S11 7

#定義S12 12

#定義S13 17

#定義S14 22

#定義S21 5

#定義S22 9

#定義S23 14

#定義S24 20

#定義S31 4

#定義S32 11

#定義S33 16

#定義S34 23

#define S41 6

#定義S42 10

#定義S43 15

#定義S44 21

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

靜態void編碼(無符號char *、UINT32 *、無符號int);

靜態void解碼(UINT32 *、unsigned char *、unsigned int);

靜態無符號字符填充[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, 0

};

#定義F(x,y,z)(((x)& amp;(y))|((~ x)& amp;(z)))

#定義G(x,y,z)(((x)& amp;(z))|((y)& amp;(~z)))

#定義H(x,y,z) ((x) ^ (y) ^ (z))

#定義I(x,y,z) ((y) ^ ((x) | (~z)))

#define ROTATE_LEFT(x,n)(((x)& lt;& lt(n)) | ((x)>& gt(32-(n))))

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

(a) += F ((b)、(c)、(d))+(x)+(uint 32)(AC);\

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

(a)+=(b);\

}

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

(a) += G ((b)、(c)、(d))+(x)+(uint 32)(AC);\

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

(a)+=(b);\

}

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

(a) += H ((b)、(c)、(d))+(x)+(uint 32)(AC);\

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

(a)+=(b);\

}

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

(a) += I ((b)、(c)、(d))+(x)+(uint 32)(AC);\

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

(a)+=(b);\

}

void MD5 init(MD5 _ CTX *上下文)

{

上下文->;count[0] = context->count[1]= 0;

上下文->;state[0]= 0x 67452301;

上下文->;state[1]= 0x efcdab 89;

上下文->;state[2]= 0x 98 bad cfe;

上下文->;state[3]= 0x 10325476;

}

void MD5 update(MD5 _ CTX *上下文,無符號字符*輸入,無符號整數輸入)

{

無符號int i,index,partLen

index =(unsigned int)((context-& gt;count[0]& gt;& gt3)& amp;0x3F);

if((上下文-& gt;count[0]+=((uint 32)input len & lt;& lt3))

& lt((uint 32)input len & lt;& lt3))

上下文->;count[1]++;

上下文->;count[1]+=((uint 32)input len & gt;& gt29);

part len = 64-index;

if(input len & gt;= partLen) {

memcpy((無符號字符*)& amp;上下文->;buffer[index],(unsigned char *)input,partLen);

MD5Transform(上下文-& gt;狀態,上下文-& gt;緩沖);

for(I = part len;I+63 & lt;inputLeni += 64)

MD5Transform(上下文-& gt;國家& amp輸入[I]);

索引= 0;

}

其他

I = 0;

memcpy((無符號字符*)& amp;上下文->;buffer[index],(無符號字符*)& amp;輸入[i],

input len-I);

}

void MD5Final(無符號字符摘要[16],MD5_CTX *上下文)

{

無符號字符位[8];

無符號int索引,padLen

編碼(位,上下文->;計數,8);

index =(unsigned int)((context-& gt;count[0]& gt;& gt3)& amp;0x3f);

padLen =(index & lt;56) ?(56 -指數):(120 -指數);

MD5Update (context,PADDING,padLen);

MD5Update(上下文,位,8);

編碼(摘要,上下文->;州,16);

memset((無符號char *)context,0,sizeof(* context));

}

靜態void MD5Transform (UINT32狀態[4],無符號字符塊[64])

{

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

解碼(x,塊,64);

/* Round 1 */

FF (a,b,c,d,x[ 0],S11,0x d 76 a 478);/* 1 */

FF (d,a,b,c,x[ 1],S12,0x e 8 c 7 b 756);/* 2 */

FF (c,d,a,b,x[ 2],S13,0x 242070 db);/* 3 */

FF (b,c,d,a,x[ 3],S14,0xc 1 BDC eee);/* 4 */

FF (a,b,c,d,x[ 4],S11,0 xf 57 c 0 faf);/* 5 */

FF (d,a,b,c,x[ 5],S12,0x 4787 c62a);/* 6 */

FF (c,d,a,b,x[ 6],S13,0xa 8304613);/* 7 */

FF (b,c,d,a,x[ 7],S14,0x FD 469501);/* 8 */

FF (a,b,c,d,x[ 8],S11,0x 698098 D8);/* 9 */

FF (d,a,b,c,x[ 9],S12,0x8b 44 f 7 af);/* 10 */

FF (c,d,a,b,x[10],S13,0x ffff 5b b 1);/* 11 */

FF (b,c,d,a,x[11],S14,0x 895 CD 7 be);/* 12 */

FF (a,b,c,d,x[12],S11,0x6b 901122);/* 13 */

FF (d,a,b,c,x[13],S12,0x FD 987193);/* 14 */

FF (c,d,a,b,x[14],S13,0xa 679438 e);/* 15 */

FF (b,c,d,a,x[15],S14,0x49b 40821);/* 16 */

/*第二輪*/

GG (a,b,c,d,x[ 1],S21,0xf 61e 2562);/* 17 */

GG (d,a,b,c,x[ 6],S22,0xc 040 b 340);/* 18 */

GG (c,d,a,b,x[11],S23,0x 265 e5a 51);/* 19 */

GG (b,c,d,a,x[ 0],S24,0x e 9 b 6 c 7 aa);/* 20 */

GG (a,b,c,d,x[ 5],S21,0x d 62 f 105d);/* 21 */

GG (d,a,b,c,x[10],S22,0x 2441453);/* 22 */

GG (c,d,a,b,x[15],S23,0xd8a 1e 681);/* 23 */

GG (b,c,d,a,x[ 4],S24,0x e 7 D3 FBC 8);/* 24 */

GG (a,b,c,d,x[ 9],S21,0x 21e 1 CDE 6);/* 25 */

GG (d,a,b,c,x[14],S22,0xc 33707d 6);/* 26 */

GG (c,d,a,b,x[ 3],S23,0x f 4d 50d 87);/* 27 */

GG (b,c,d,a,x[ 8],S24,0x 455 a 14ed);/* 28 */

GG (a,b,c,d,x[13],S21,0x a 9 e 3 e 905);/* 29 */

GG (d,a,b,c,x[ 2],S22,0x fcefa 3 f 8);/* 30 */

GG (c,d,a,b,x[ 7],S23,0x 676 f02d 9);/* 31 */

GG (b,c,d,a,x[12],S24,0x 8d 2 a4 c 8 a);/* 32 */

/*第三輪*/

HH (a,b,c,d,x[ 5],S31,0x fffa 3942);/* 33 */

HH (d,a,b,c,x[ 8],S32,0x 8771f 681);/* 34 */

HH (c,d,a,b,x[11],S33,0x6d 9d 6122);/* 35 */

HH (b,c,d,a,x[14],S34,0x FDE 5380 c);/* 36 */

HH (a,b,c,d,x[ 1],S31,0x a4 beea 44);/* 37 */

HH (d,a,b,c,x[ 4],S32,0x 4 bdecfa 9);/* 38 */

HH (c,d,a,b,x[ 7],S33,0 xf 6 bb 4b 60);/* 39 */

HH (b,c,d,a,x[10],S34,0x befbc 70);/* 40 */

HH (a,b,c,d,x[13],S31,0x 289 b 7 EC 6);/* 41 */

HH (d,a,b,c,x[ 0],S32,0x EAA 127 fa);/* 42 */

HH (c,d,a,b,x[ 3],S33,0x d4ef 3085);/* 43 */

HH (b,c,d,a,x[ 6],S34,0x 4881d 05);/* 44 */

HH (a,b,c,d,x[ 9],S31,0x d 9d 4d 039);/* 45 */

HH (d,a,b,c,x[12],S32,0x e 6 db 99 e 5);/* 46 */

HH (c,d,a,b,x[15],S33,0x 1fa 27 cf 8);/* 47 */

HH (b,c,d,a,x[ 2],S34,0x C4 AC 5665);/* 48 */

/*第4輪*/

II (a,b,c,d,x[ 0],S41,0xf 4292244);/* 49 */

II (d,a,b,c,x[ 7],S42,0x 432 aff 97);/* 50 */

II (c,d,a,b,x[14],S43,0x ab 9423 a 7);/* 51 */

II (b,c,d,a,x[ 5],S44,0x fc 93 a 039);/* 52 */

II (a,b,c,d,x[12],S41,0x 655 b 59 c 3);/* 53 */

II (d,a,b,c,x[ 3],S42,0x 8 f 0 CCC 92);/* 54 */

II (c,d,a,b,x[10],S43,0x ffeff 47d);/* 55 */

II (b,c,d,a,x[ 1],S44,0x 85845 DD 1);/* 56 */

II (a,b,c,d,x[ 8],S41,0x 6 fa 87 e4f);/* 57 */

II (d,a,b,c,x[15],S42,0 xfe 2 ce 6 e 0);/* 58 */

II (c,d,a,b,x[ 6],S43,0xa 3014314);/* 59 */

II (b,c,d,a,x[13],S44,0x4e 0811a 1);/* 60 */

II (a,b,c,d,x[ 4],S41,0xf 7537 e82);/* 61 */

II (d,a,b,c,x[11],S42,0x BD 3 af 235);/* 62 */

II (c,d,a,b,x[ 2],S43,0x 2 ad 7d 2 bb);/* 63 */

II (b,c,d,a,x[ 9],S44,0 xeb 86d 391);/* 64 */

state[0]+= a;

state[1]+= b;

狀態[2]+= c;

狀態[3]+= d;

memset((無符號char *)x,0,sizeof(x));

}

靜態void編碼(無符號char *輸出,UINT32 *輸入,無符號int len)

{

無符號int i,j;

for (i = 0,j = 0;j & ltleni++,j += 4) {

output[j] =(無符號字符)(input[I]& amp;0x ff);

output[j+1] =(無符號字符)((input[I]& gt;& gt8)& amp;0x ff);

output[j+2] =(無符號字符)((input[I]& gt;& gt16);0x ff);

output[j+3] =(無符號字符)((input[I]& gt;& gt24)& amp;0x ff);

}

}

靜態void解碼(UINT32 *輸出,無符號char *輸入,無符號int len)

{

無符號int i,j;

for (i = 0,j = 0;j & ltleni++,j += 4)

output[I]=((uint 32)input[j])|(((uint 32)input[j+1])& lt;& lt8) |

(((uint 32)input[j+2])& lt;& lt16)|(((uint 32)input[j+3])& lt;& lt24);

}

-

就這兩份文件。使用時,將它們添加到項目或makefile中,調用時包含md5.h。舉個簡單的例子,輸入壹個字符串然後計算它的md5值輸出,在VC6.0和GCC4.4下測試通過:

# include & ltstdio.h & gt

# include & ltstring.h & gt

#包含“md5.h”

int main()

{

char tmp[128];

無符號字符摘要[16];

MD5_CTX上下文;

scanf("%s ",tmp);

MD5 init(& amp;語境);

MD 5 update(& amp;上下文,(unsigned char*)tmp,strlen(tmp));

MD5Final(摘要& amp語境);

printf(" MD 5 value:");

for(int I = 0;我& lt16;++i)

{

printf("%02X ",digest[I]);

}

printf(" \ n ");

返回0;

}

  • 上一篇:1983年陰歷8月20子時生,哪位大師幫我算壹下?
  • 下一篇:session怎麽得到request
  • copyright 2024編程學習大全網