亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? md5.cpp

?? 強(qiáng)大易用的郵件收發(fā)客戶端
?? CPP
字號:
#include "stdafx.h"

/* GLOBAL.H - RSAREF types and constants
 */

/* UINT2 defines a two byte word */
typedef unsigned short int UINT2;

/* UINT4 defines a four byte word */
typedef unsigned long int UINT4;

/* MD5.H - header file for MD5C.C
 */

/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
rights reserved.

License to copy and use this software is granted provided that it
is identified as the "RSA Data Security, Inc. MD5 Message-Digest
Algorithm" in all material mentioning or referencing this software
or this function.

License is also granted to make and use derivative works provided
that such works are identified as "derived from the RSA Data
Security, Inc. MD5 Message-Digest Algorithm" in all material
mentioning or referencing the derived work.

RSA Data Security, Inc. makes no representations concerning either
the merchantability of this software or the suitability of this
software for any particular purpose. It is provided "as is"
without express or implied warranty of any kind.
These notices must be retained in any copies of any part of this
documentation and/or software.
 */

/* MD5 context. */
typedef struct 
{
	UINT4 state[4];                                   /* state (ABCD) */
	UINT4 count[2];        /* number of bits, modulo 2^64 (lsb first) */
	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 * );
*/


/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm
 */

/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
rights reserved.

License to copy and use this software is granted provided that it
is identified as the "RSA Data Security, Inc. MD5 Message-Digest
Algorithm" in all material mentioning or referencing this software
or this function.

License is also granted to make and use derivative works provided
that such works are identified as "derived from the RSA Data
Security, Inc. MD5 Message-Digest Algorithm" in all material
mentioning or referencing the derived work.

RSA Data Security, Inc. makes no representations concerning either
the merchantability of this software or the suitability of this
software for any particular purpose. It is provided "as is"
without express or implied warranty of any kind.

These notices must be retained in any copies of any part of this
documentation and/or software.
 */

#include <memory.h>

/* POINTER defines a generic pointer type */
typedef unsigned char* POINTER;

/* 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( UINT4 [4], unsigned char [64] );
static void Encode( unsigned char *, UINT4 *, unsigned int );
static void Decode( UINT4 *, unsigned char *, unsigned int );

#define MD5_memcpy( a, b, c )		memcpy( (a), (b), (c) )
#define MD5_memset( a, b, c )		memset( (a), (b), (c) )

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 and I are basic MD5 functions.
 */
#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 rotates x left n bits.
 */
#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))

/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
Rotation is separate from addition to prevent recomputation.
 */
#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 initialization. Begins an MD5 operation, writing a new context.
 */
static
void MD5Init( MD5_CTX *context )
{
	context->count[0] = context->count[1] = 0;
	/* Load magic initialization constants.*/
	context->state[0] = 0x67452301;
	context->state[1] = 0xefcdab89;
	context->state[2] = 0x98badcfe;
	context->state[3] = 0x10325476;
}

/* MD5 block update operation. Continues an MD5 message-digest
  operation, processing another message block, and updating the
  context.
 */
static
void MD5Update( MD5_CTX *context, unsigned char *input, unsigned int inputLen )
{
	/* Compute number of bytes mod 64 */
	unsigned int index = (unsigned int)((context->count[0] >> 3) & 0x3F);
	unsigned int partLen = 64 - index;
	unsigned int i = 0;

	/* Update number of bits */
	if ((context->count[0] += ((UINT4)inputLen << 3)) < ((UINT4)inputLen << 3)) context->count[1]++;
	context->count[1] += ((UINT4)inputLen >> 29);


	/* Transform as many times as possible.*/
	if (inputLen >= partLen) 
	{
		MD5_memcpy( &context->buffer[index], input, partLen );
		MD5Transform( context->state, context->buffer );
		for( i = partLen; i + 63 < inputLen; i += 64)
			MD5Transform (context->state, &input[i]);
		index = 0;
	}
	else i = 0;

	/* Buffer remaining input */
	MD5_memcpy( &context->buffer[index], &input[i], inputLen-i );
}

/* MD5 finalization. Ends an MD5 message-digest operation, writing the
  the message digest and zeroizing the context.
 */
static
void MD5Final( unsigned char digest[16], MD5_CTX *context )
{
	unsigned char bits[8];
	unsigned int index, padLen;

	/* Save number of bits */
	Encode (bits, context->count, 8);

	/* Pad out to 56 mod 64.*/
	index = (unsigned int)((context->count[0] >> 3) & 0x3f);
	padLen = (index < 56) ? (56 - index) : (120 - index);
	MD5Update (context, PADDING, padLen);

	/* Append length (before padding) */
	MD5Update (context, bits, 8);

	/* Store state in digest */
	Encode (digest, context->state, 16);

	/* Zeroize sensitive information*/
	MD5_memset ((POINTER)context, 0, sizeof (*context));
}

/* MD5 basic transformation. Transforms state based on block.
 */
static void MD5Transform( 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);

	/* Round 1 */
	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 */

	/* Round 2 */
	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 */

	/* Round 3 */
	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 */

	/* Round 4 */
	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;

	/* Zeroize sensitive information.*/
	MD5_memset( (POINTER)x, 0, sizeof (x) );
}

/* Encodes input (UINT4) into output (unsigned char). Assumes len is
  a multiple of 4.
 */
static void Encode( unsigned char *output, UINT4 *input, unsigned int len )
{
	for( unsigned int i = 0, j = 0; j < len; i++, j += 4 ) 
	{
		output[j] = (unsigned char) (input[i] & 0xff);
		output[j+1] = (unsigned char) ((input[i] >> 8) & 0xff);
		output[j+2] = (unsigned char) ((input[i] >> 16) & 0xff);
		output[j+3] = (unsigned char) ((input[i] >> 24) & 0xff);
	}
}

/* Decodes input (unsigned char) into output (UINT4). Assumes len is
  a multiple of 4.
 */
static void Decode( UINT4 *output, unsigned char *input, unsigned int len )
{
	for( unsigned int i = 0, j = 0; j < len; i++, j += 4 )
	{
		output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) |
			(((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24);
	}
}


/*
** Digests a string
*/
void MD5String( char *string, unsigned char digest[16] )
{
	MD5_CTX context;
	MD5Init( &context );
	MD5Update( &context, (unsigned char*) string, strlen( string ) );
	MD5Final( digest, &context );
}


/*
** Function: hmac_md5
*/

void hmac_md5(
	unsigned char*  text,			/* pointer to data stream */
	int             text_len,		/* length of data stream */
	unsigned char*  key,			/* pointer to authentication key */
	int             key_len,		/* length of authentication key */
	unsigned char	digest[16])		/* caller digest to be filled in */

{
        MD5_CTX context;        
		unsigned char k_ipad[65];    /* inner padding -
                                      * key XORd with ipad
                                      */

        unsigned char k_opad[65];    /* outer padding -
                                      * key XORd with opad
                                      */        
		
		unsigned char tk[16];
        int i;
        
		/* if key is longer than 64 bytes reset it to key=MD5(key) */
        if (key_len > 64) 
		{                
			MD5_CTX      tctx;
            MD5Init(&tctx);                
			MD5Update(&tctx, key, key_len);
            MD5Final(tk, &tctx);                
			key = tk;
            key_len = 16;        
		}   
		
		/*
         * the HMAC_MD5 transform looks like:         
		 *
         * MD5(K XOR opad, MD5(K XOR ipad, text))         
		 *
         * where K is an n byte key
         * ipad is the byte 0x36 repeated 64 times
         * opad is the byte 0x5c repeated 64 times
         * and text is the data being protected         
		 */

        /* start out by storing key in pads */
        memset( k_ipad, 0, sizeof k_ipad );        
		memset( k_opad, 0, sizeof k_opad );
        memcpy( k_ipad, key, key_len );        
		memcpy( k_opad, key, key_len );
  
        /* XOR key with ipad and opad values */        
		for (i=0; i<64; i++) 
		{
			k_ipad[i] ^= 0x36;                
			k_opad[i] ^= 0x5c;        
		}

        /*         
		* perform inner MD5         
		*/

        MD5Init(&context);                   /* init context for 1st
                                              * pass */
        MD5Update(&context, k_ipad, 64);     /* start with inner pad */
        MD5Update(&context, text, text_len); /* then text of datagram */
        MD5Final(digest, &context);          /* finish up 1st pass */        
											 
		/*
         * perform outer MD5         
		 */
        MD5Init(&context);                   /* init context for 2nd
                                              * pass */
        MD5Update(&context, k_opad, 64);     /* start with outer pad */
        MD5Update(&context, digest, 16);     /* then results of 1st
                                              * hash */
        MD5Final(digest, &context);          /* finish up 2nd pass */
}

void HMAC_MD5String( char *text, char *key, unsigned char digest[16] )
{
	hmac_md5( (unsigned char*) text, strlen(text), (unsigned char*) key, strlen(key), digest );
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久精品一区二区| 在线观看日韩电影| 91网站视频在线观看| 精品少妇一区二区三区| 日韩理论片在线| 久久av老司机精品网站导航| 91原创在线视频| 国产午夜精品理论片a级大结局| 偷拍与自拍一区| 成人免费看的视频| 精品国产亚洲一区二区三区在线观看| 亚洲国产精品麻豆| 欧美中文字幕久久| 亚洲激情五月婷婷| av电影在线观看不卡| 国产亚洲精品免费| 国产成人啪免费观看软件 | 在线综合视频播放| 天天操天天综合网| 欧美日韩成人一区| 亚洲午夜精品17c| 欧美一区二区三区四区五区| 亚洲综合色网站| 欧美另类一区二区三区| 男女男精品网站| 日韩欧美国产成人一区二区| 免费av成人在线| 久久精品亚洲国产奇米99| 99视频国产精品| 视频一区国产视频| 精品国产乱码久久久久久久 | 欧美日韩aaa| 久久99久久久欧美国产| 中文字幕一区二区三区四区不卡| 国产一区在线视频| 一区二区三区在线免费播放| 69堂精品视频| 另类欧美日韩国产在线| 国产三级精品视频| 777色狠狠一区二区三区| 久久国产生活片100| 久久久久9999亚洲精品| 欧美日韩免费电影| 国产精品456| 美日韩黄色大片| 久久一区二区视频| 欧美久久一二三四区| av午夜精品一区二区三区| 蜜桃一区二区三区在线| 亚洲激情综合网| 国产精品久久福利| 精品久久久久99| 欧美欧美欧美欧美| 99精品偷自拍| 99re成人在线| av中文字幕不卡| 国产精品88888| 国产精品主播直播| 国产精品一区二区黑丝| 精品一区二区影视| 精品一区二区三区在线观看| 日日夜夜免费精品| 麻豆国产精品777777在线| 视频一区中文字幕| 捆绑调教美女网站视频一区| **网站欧美大片在线观看| 国产精品免费aⅴ片在线观看| 久久日一线二线三线suv| 精品欧美久久久| 国产精品伦一区| 亚洲另类中文字| 日韩黄色免费电影| 国产在线精品一区二区夜色| 九九国产精品视频| 国产成人aaa| 色88888久久久久久影院按摩| 欧美三级电影在线观看| 欧美在线free| 欧美国产禁国产网站cc| 久久精品视频一区二区三区| 久久综合久久综合九色| 欧美www视频| 一区二区三区加勒比av| 日韩精品高清不卡| 本田岬高潮一区二区三区| 在线精品视频一区二区三四| 91在线观看成人| 日韩欧美国产一区二区三区| 国产午夜精品福利| 午夜视频在线观看一区| 成人免费看视频| 91在线观看成人| 国产亚洲欧美日韩在线一区| 亚洲伊人伊色伊影伊综合网| 日韩成人av影视| 91麻豆123| 亚洲视频免费在线| 国产老肥熟一区二区三区| 51精品久久久久久久蜜臀| 亚洲日本在线a| 99在线精品免费| 欧美国产视频在线| 国产馆精品极品| 国产日韩精品一区二区三区| 亚洲成人av中文| 在线不卡一区二区| 天天综合日日夜夜精品| 欧美私模裸体表演在线观看| 国产精品女同互慰在线看| 日本欧美肥老太交大片| 欧美日韩中文另类| 一区二区三区日韩精品视频| 不卡一卡二卡三乱码免费网站| 久久夜色精品一区| 成人不卡免费av| 1000部国产精品成人观看| 欧美性一二三区| 亚洲在线成人精品| 色就色 综合激情| 一区二区日韩电影| 欧美男同性恋视频网站| 日韩不卡一区二区三区| 精品va天堂亚洲国产| 国产宾馆实践打屁股91| 专区另类欧美日韩| 日韩视频一区在线观看| 美脚の诱脚舐め脚责91| 9191久久久久久久久久久| 久久电影网站中文字幕| 国产精品久久久一区麻豆最新章节| 97久久人人超碰| 欧美a级理论片| 亚洲特黄一级片| 日韩欧美一区二区免费| 91在线精品一区二区| 青青青伊人色综合久久| 亚洲视频一区二区在线| 日韩欧美成人激情| 欧美曰成人黄网| 国产成人午夜精品5599| 亚洲蜜臀av乱码久久精品蜜桃| 日韩欧美不卡在线观看视频| 91丝袜高跟美女视频| 久久99精品久久只有精品| 日韩一区有码在线| 国产精品私人自拍| 精品久久久影院| 欧美精品高清视频| 91官网在线观看| 福利视频网站一区二区三区| 久久国产剧场电影| 免费观看在线综合色| 婷婷综合久久一区二区三区| 亚洲私人黄色宅男| 国产精品美女久久久久久2018| 精品日韩一区二区三区免费视频| 欧美无人高清视频在线观看| 91福利精品视频| 日韩一区二区视频在线观看| 91精品久久久久久久99蜜桃| 在线一区二区三区四区五区| 在线亚洲高清视频| 日韩欧美专区在线| 国产欧美va欧美不卡在线| 亚洲日本一区二区三区| 亚洲成人午夜电影| 国产成人激情av| 日本高清无吗v一区| 日韩精品中文字幕一区| 亚洲欧美日韩国产另类专区| 婷婷成人综合网| 成人午夜激情在线| 欧美男同性恋视频网站| 国产色91在线| 日本欧美一区二区| 不卡欧美aaaaa| 欧美一区二区三区在| 国产精品久久久久aaaa樱花| 亚洲一区二区偷拍精品| 国产自产视频一区二区三区 | 久久精品视频在线看| 洋洋av久久久久久久一区| 国产91丝袜在线18| 日韩欧美国产一区二区三区| 一区二区三区四区不卡在线| 经典三级在线一区| 91精品国产欧美一区二区成人| 1000部国产精品成人观看| 高清视频一区二区| 久久久夜色精品亚洲| 久久激情五月婷婷| 欧美日韩精品欧美日韩精品一综合 | 婷婷夜色潮精品综合在线| 99re成人精品视频| 亚洲欧美日韩中文字幕一区二区三区| 国产一区二区成人久久免费影院| 欧美顶级少妇做爰| 日本美女视频一区二区| 日韩三级视频在线观看| 日本中文在线一区|