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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? md5.cpp

?? Windows下方便簡單的免費MD5驗證工具WMD5
?? CPP
字號:
/* md5.c - Functions to compute MD5 message digest of files or memory blocks   according to the definition of MD5 in RFC 1321 from April 1992.   Copyright (C) 1995, 1996 Free Software Foundation, Inc.   This file is part of the GNU C library.   The GNU C Library is free software; you can redistribute it and/or   modify it under the terms of the GNU Library General Public License as   published by the Free Software Foundation; either version 2 of the   License, or (at your option) any later version.   The GNU C Library is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU   Library General Public License for more details.   You should have received a copy of the GNU Library General Public   License along with the GNU C Library; see the file COPYING.LIB.  If not,   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,   Boston, MA 02111-1307, USA.  *//* Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.  */
#include "stdafx.h"#ifdef HAVE_CONFIG_H# include <config.h>#endif# include <stdlib.h># include <string.h>
#include "md5.h"#ifdef _LIBC# include <endian.h># if __BYTE_ORDER == __BIG_ENDIAN#  define WORDS_BIGENDIAN 1# endif#endif#ifdef WORDS_BIGENDIAN# define SWAP(n)							\    (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24))#else# define SWAP(n) (n)#endif/* This array contains the bytes used to pad the buffer to the next   64-byte boundary.  (RFC 1321, 3.1: Step 1)  */static const unsigned char fillbuf[64] = { 0x80, 0 /* , 0, 0, ...  */ };/* Initialize structure containing state of computation.   (RFC 1321, 3.3: Step 3)  */voidmd5_init_ctx (struct md5_ctx *ctx){  ctx->A = 0x67452301;  ctx->B = 0xefcdab89;  ctx->C = 0x98badcfe;  ctx->D = 0x10325476;  ctx->total[0] = ctx->total[1] = 0;  ctx->buflen = 0;}/* Put result from CTX in first 16 bytes following RESBUF.  The result   must be in little endian byte order.   IMPORTANT: On some systems it is required that RESBUF is correctly   aligned for a 32 bits value.  */void *md5_read_ctx (const struct md5_ctx *ctx, void *resbuf){  ((md5_uint32 *) resbuf)[0] = SWAP (ctx->A);  ((md5_uint32 *) resbuf)[1] = SWAP (ctx->B);  ((md5_uint32 *) resbuf)[2] = SWAP (ctx->C);  ((md5_uint32 *) resbuf)[3] = SWAP (ctx->D);  return resbuf;}/* Process the remaining bytes in the internal buffer and the usual   prolog according to the standard and write the result to RESBUF.   IMPORTANT: On some systems it is required that RESBUF is correctly   aligned for a 32 bits value.  */void *md5_finish_ctx (struct md5_ctx *ctx, void *resbuf){  /* Take yet unprocessed bytes into account.  */  md5_uint32 bytes = ctx->buflen;  size_t pad;  /* Now count remaining bytes.  */  ctx->total[0] += bytes;  if (ctx->total[0] < bytes)    ++ctx->total[1];  pad = bytes >= 56 ? 64 + 56 - bytes : 56 - bytes;  memcpy (&ctx->buffer[bytes], fillbuf, pad);  /* Put the 64-bit file length in *bits* at the end of the buffer.  */  *(md5_uint32 *) &ctx->buffer[bytes + pad] = SWAP (ctx->total[0] << 3);  *(md5_uint32 *) &ctx->buffer[bytes + pad + 4] = SWAP ((ctx->total[1] << 3) |							(ctx->total[0] >> 29));  /* Process last bytes.  */  md5_process_block (ctx->buffer, bytes + pad + 8, ctx);  return md5_read_ctx (ctx, resbuf);}/* Compute MD5 message digest for bytes read from STREAM.  The   resulting message digest number will be written into the 16 bytes   beginning at RESBLOCK.  */intmd5_stream (FILE *stream, void *resblock){  /* Important: BLOCKSIZE must be a multiple of 64.  */#define BLOCKSIZE 4096  struct md5_ctx ctx;  char buffer[BLOCKSIZE + 72];  size_t sum;  /* Initialize the computation context.  */  md5_init_ctx (&ctx);  /* Iterate over full file contents.  */  while (1)    {      /* We read the file in blocks of BLOCKSIZE bytes.  One call of the	 computation function processes the whole buffer so that with the	 next round of the loop another block can be read.  */      size_t n;      sum = 0;      /* Read block.  Take care for partial reads.  */      do	{	  n = fread (buffer + sum, 1, BLOCKSIZE - sum, stream);	  sum += n;	}      while (sum < BLOCKSIZE && n != 0);      if (n == 0 && ferror (stream))        return 1;      /* If end of file is reached, end the loop.  */      if (n == 0)	break;      /* Process buffer with BLOCKSIZE bytes.  Note that			BLOCKSIZE % 64 == 0       */      md5_process_block (buffer, BLOCKSIZE, &ctx);    }  /* Add the last bytes if necessary.  */  if (sum > 0)    md5_process_bytes (buffer, sum, &ctx);  /* Construct result in desired memory.  */  md5_finish_ctx (&ctx, resblock);  return 0;}/* Compute MD5 message digest for LEN bytes beginning at BUFFER.  The   result is always in little endian byte order, so that a byte-wise   output yields to the wanted ASCII representation of the message   digest.  */void *md5_buffer (const unsigned char *buffer, unsigned long len, void *resblock){  struct md5_ctx ctx;  /* Initialize the computation context.  */  md5_init_ctx (&ctx);  /* Process whole buffer but last len % 64 bytes.  */  md5_process_bytes (buffer, len, &ctx);  /* Put result in desired memory area.  */  return md5_finish_ctx (&ctx, resblock);}voidmd5_process_bytes (const void *buffer, size_t len, struct md5_ctx *ctx){  /* When we already have some bits in our internal buffer concatenate     both inputs first.  */  if (ctx->buflen != 0)    {      size_t left_over = ctx->buflen;      size_t add = 128 - left_over > len ? len : 128 - left_over;      memcpy (&ctx->buffer[left_over], buffer, add);      ctx->buflen += add;      if (left_over + add > 64)	{	  md5_process_block (ctx->buffer, (left_over + add) & ~63, ctx);	  /* The regions in the following copy operation cannot overlap.  */	  memcpy (ctx->buffer, &ctx->buffer[(left_over + add) & ~63],		  (left_over + add) & 63);	  ctx->buflen = (left_over + add) & 63;	}      buffer = (const char *) buffer + add;      len -= add;    }  /* Process available complete blocks.  */  if (len > 64)    {      md5_process_block (buffer, len & ~63, ctx);      buffer = (const char *) buffer + (len & ~63);      len &= 63;    }  /* Move remaining bytes in internal buffer.  */  if (len > 0)    {      memcpy (ctx->buffer, buffer, len);      ctx->buflen = len;    }}/* These are the four functions used in the four steps of the MD5 algorithm   and defined in the RFC 1321.  The first function is a little bit optimized   (as found in Colin Plumbs public domain implementation).  *//* #define FF(b, c, d) ((b & c) | (~b & d)) */#define FF(b, c, d) (d ^ (b & (c ^ d)))#define FG(b, c, d) FF (d, b, c)#define FH(b, c, d) (b ^ c ^ d)#define FI(b, c, d) (c ^ (b | ~d))/* Process LEN bytes of BUFFER, accumulating context into CTX.   It is assumed that LEN % 64 == 0.  */voidmd5_process_block (const void *buffer, size_t len, struct md5_ctx *ctx){  md5_uint32 correct_words[16];  const md5_uint32 *words = (md5_uint32 *)buffer;  size_t nwords = len / sizeof (md5_uint32);  const md5_uint32 *endp = words + nwords;  md5_uint32 A = ctx->A;  md5_uint32 B = ctx->B;  md5_uint32 C = ctx->C;  md5_uint32 D = ctx->D;  /* First increment the byte count.  RFC 1321 specifies the possible     length of the file up to 2^64 bits.  Here we only compute the     number of bytes.  Do a double word increment.  */  ctx->total[0] += len;  if (ctx->total[0] < len)    ++ctx->total[1];  /* Process all bytes in the buffer with 64 bytes in each round of     the loop.  */  while (words < endp)    {      md5_uint32 *cwp = correct_words;      md5_uint32 A_save = A;      md5_uint32 B_save = B;      md5_uint32 C_save = C;      md5_uint32 D_save = D;      /* First round: using the given function, the context and a constant	 the next context is computed.  Because the algorithms processing	 unit is a 32-bit word and it is determined to work on words in	 little endian byte order we perhaps have to change the byte order	 before the computation.  To reduce the work for the next steps	 we store the swapped words in the array CORRECT_WORDS.  */#define OP(a, b, c, d, s, T)						\      do								\        {								\	  a += FF (b, c, d) + (*cwp++ = SWAP (*words)) + T;		\	  ++words;							\	  CYCLIC (a, s);						\	  a += b;							\        }								\      while (0)      /* It is unfortunate that C does not provide an operator for	 cyclic rotation.  Hope the C compiler is smart enough.  */#define CYCLIC(w, s) (w = (w << s) | (w >> (32 - s)))      /* Before we start, one word to the strange constants.	 They are defined in RFC 1321 as	 T[i] = (int) (4294967296.0 * fabs (sin (i))), i=1..64       */      /* Round 1.  */      OP (A, B, C, D,  7, 0xd76aa478);      OP (D, A, B, C, 12, 0xe8c7b756);      OP (C, D, A, B, 17, 0x242070db);      OP (B, C, D, A, 22, 0xc1bdceee);      OP (A, B, C, D,  7, 0xf57c0faf);      OP (D, A, B, C, 12, 0x4787c62a);      OP (C, D, A, B, 17, 0xa8304613);      OP (B, C, D, A, 22, 0xfd469501);      OP (A, B, C, D,  7, 0x698098d8);      OP (D, A, B, C, 12, 0x8b44f7af);      OP (C, D, A, B, 17, 0xffff5bb1);      OP (B, C, D, A, 22, 0x895cd7be);      OP (A, B, C, D,  7, 0x6b901122);      OP (D, A, B, C, 12, 0xfd987193);      OP (C, D, A, B, 17, 0xa679438e);      OP (B, C, D, A, 22, 0x49b40821);      /* For the second to fourth round we have the possibly swapped words	 in CORRECT_WORDS.  Redefine the macro to take an additional first	 argument specifying the function to use.  */#undef OP#define OP(f, a, b, c, d, k, s, T)					\      do 								\	{								\	  a += f (b, c, d) + correct_words[k] + T;			\	  CYCLIC (a, s);						\	  a += b;							\	}								\      while (0)      /* Round 2.  */      OP (FG, A, B, C, D,  1,  5, 0xf61e2562);      OP (FG, D, A, B, C,  6,  9, 0xc040b340);      OP (FG, C, D, A, B, 11, 14, 0x265e5a51);      OP (FG, B, C, D, A,  0, 20, 0xe9b6c7aa);      OP (FG, A, B, C, D,  5,  5, 0xd62f105d);      OP (FG, D, A, B, C, 10,  9, 0x02441453);      OP (FG, C, D, A, B, 15, 14, 0xd8a1e681);      OP (FG, B, C, D, A,  4, 20, 0xe7d3fbc8);      OP (FG, A, B, C, D,  9,  5, 0x21e1cde6);      OP (FG, D, A, B, C, 14,  9, 0xc33707d6);      OP (FG, C, D, A, B,  3, 14, 0xf4d50d87);      OP (FG, B, C, D, A,  8, 20, 0x455a14ed);      OP (FG, A, B, C, D, 13,  5, 0xa9e3e905);      OP (FG, D, A, B, C,  2,  9, 0xfcefa3f8);      OP (FG, C, D, A, B,  7, 14, 0x676f02d9);      OP (FG, B, C, D, A, 12, 20, 0x8d2a4c8a);      /* Round 3.  */      OP (FH, A, B, C, D,  5,  4, 0xfffa3942);      OP (FH, D, A, B, C,  8, 11, 0x8771f681);      OP (FH, C, D, A, B, 11, 16, 0x6d9d6122);      OP (FH, B, C, D, A, 14, 23, 0xfde5380c);      OP (FH, A, B, C, D,  1,  4, 0xa4beea44);      OP (FH, D, A, B, C,  4, 11, 0x4bdecfa9);      OP (FH, C, D, A, B,  7, 16, 0xf6bb4b60);      OP (FH, B, C, D, A, 10, 23, 0xbebfbc70);      OP (FH, A, B, C, D, 13,  4, 0x289b7ec6);      OP (FH, D, A, B, C,  0, 11, 0xeaa127fa);      OP (FH, C, D, A, B,  3, 16, 0xd4ef3085);      OP (FH, B, C, D, A,  6, 23, 0x04881d05);      OP (FH, A, B, C, D,  9,  4, 0xd9d4d039);      OP (FH, D, A, B, C, 12, 11, 0xe6db99e5);      OP (FH, C, D, A, B, 15, 16, 0x1fa27cf8);      OP (FH, B, C, D, A,  2, 23, 0xc4ac5665);      /* Round 4.  */      OP (FI, A, B, C, D,  0,  6, 0xf4292244);      OP (FI, D, A, B, C,  7, 10, 0x432aff97);      OP (FI, C, D, A, B, 14, 15, 0xab9423a7);      OP (FI, B, C, D, A,  5, 21, 0xfc93a039);      OP (FI, A, B, C, D, 12,  6, 0x655b59c3);      OP (FI, D, A, B, C,  3, 10, 0x8f0ccc92);      OP (FI, C, D, A, B, 10, 15, 0xffeff47d);      OP (FI, B, C, D, A,  1, 21, 0x85845dd1);      OP (FI, A, B, C, D,  8,  6, 0x6fa87e4f);      OP (FI, D, A, B, C, 15, 10, 0xfe2ce6e0);      OP (FI, C, D, A, B,  6, 15, 0xa3014314);      OP (FI, B, C, D, A, 13, 21, 0x4e0811a1);      OP (FI, A, B, C, D,  4,  6, 0xf7537e82);      OP (FI, D, A, B, C, 11, 10, 0xbd3af235);      OP (FI, C, D, A, B,  2, 15, 0x2ad7d2bb);      OP (FI, B, C, D, A,  9, 21, 0xeb86d391);      /* Add the starting values of the context.  */      A += A_save;      B += B_save;      C += C_save;      D += D_save;    }  /* Put checksum in context given as argument.  */  ctx->A = A;  ctx->B = B;  ctx->C = C;  ctx->D = D;}unsigned char *getMD5(unsigned char *d,unsigned long n, unsigned char *md){	md5_ctx c;	static unsigned char m[16];	if (md == NULL) md=m;	md5_init_ctx(&c);    md5_buffer(d, n, md);//	memset(&c,0,sizeof(c)); /* security consideration */	return(md);}
/*
	try
	{
		if(isFilePresent(filename))
		{
			unsigned char t[33] = "";
			BOOL b_suc = md5_process_file(filename,t);
			sprintf((char*)currentMd5,"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%c",t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7],t[8],t[9],t[10],t[11],t[12],t[13],t[14],t[15],NULL);
			return b_suc;
		}
	}
	catch(...)
	{
	}


*/
bool md5_process_file(char *filename,void *resblock){#define read_buf_len 32768
	try	{		struct md5_ctx ctx;		md5_init_ctx (&ctx);		HANDLE hFile = CreateFile(filename,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN,NULL);
//		HANDLE hFile = CreateFile(filename,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN,NULL);

		unsigned long hilen = 0;		unsigned long flen = GetFileSize(hFile,&hilen);		unsigned long left2read = flen;		unsigned long nCount = 0;		char lp_buf[read_buf_len+128] = "";		do		{			ReadFile(hFile,lp_buf,read_buf_len,&nCount,NULL);			md5_process_bytes (lp_buf,nCount, &ctx);			left2read = left2read - nCount;		}		while(left2read > 0);		md5_finish_ctx (&ctx, resblock);

		if(hFile != INVALID_HANDLE_VALUE)			CloseHandle(hFile);		return TRUE;	}	catch(...)	{		return FALSE;	}}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜精品久久久| 在线免费精品视频| 99久久精品免费| 欧美一区二区三区免费观看视频| 久久久久国色av免费看影院| 亚洲第一av色| 99精品久久只有精品| 精品va天堂亚洲国产| 亚洲成人高清在线| av不卡免费在线观看| 久久久久久久久久久黄色| 亚洲自拍偷拍麻豆| 9l国产精品久久久久麻豆| 亚洲精品在线三区| 图片区小说区国产精品视频| 色婷婷激情一区二区三区| 欧美国产激情二区三区| 精品一区二区在线免费观看| 91麻豆精品国产| 亚洲成人精品一区| 欧美在线小视频| 国产精品福利一区二区三区| 国产麻豆精品在线| 久久久久久久久伊人| 精品在线亚洲视频| 日韩一区二区电影网| 首页国产欧美日韩丝袜| 欧美午夜影院一区| 亚洲精品免费视频| 99热精品一区二区| 亚洲素人一区二区| 波多野结衣在线一区| 国产欧美视频一区二区| 国产白丝网站精品污在线入口| 日韩欧美视频一区| 极品少妇xxxx偷拍精品少妇| 日韩视频在线你懂得| 另类小说综合欧美亚洲| 欧美sm美女调教| 国产精品亚洲视频| 欧美国产丝袜视频| 91污片在线观看| 最新久久zyz资源站| 色综合天天性综合| 亚洲国产日日夜夜| 欧美夫妻性生活| 国内精品写真在线观看| 国产午夜精品在线观看| 成人国产在线观看| 亚洲精品日韩专区silk | 精品一区二区三区在线观看国产| 日韩一卡二卡三卡四卡| 国产麻豆精品视频| 亚洲特级片在线| 欧美狂野另类xxxxoooo| 韩国av一区二区三区四区 | 久久精品国产精品青草| 日韩精品一区二区三区视频 | 日韩一区二区免费在线电影| 美腿丝袜亚洲一区| 欧美激情中文字幕一区二区| 91在线观看一区二区| 亚洲午夜一二三区视频| 日韩视频一区二区在线观看| 成人黄色免费短视频| 亚洲国产日产av| 久久亚洲欧美国产精品乐播 | 亚洲欧洲精品天堂一级 | 国产成a人亚洲精| 艳妇臀荡乳欲伦亚洲一区| 日韩一级大片在线| 成人美女视频在线观看18| 亚洲成人资源网| 欧美激情一区二区三区蜜桃视频 | 欧美一区二区三区日韩视频| 福利电影一区二区三区| 天天操天天干天天综合网| 久久九九99视频| 欧美日韩精品欧美日韩精品一| 国产麻豆精品视频| 视频一区欧美精品| 国产精品伦理在线| 欧美变态口味重另类| 色悠久久久久综合欧美99| 久久av资源站| 日韩福利视频网| 亚洲欧美精品午睡沙发| 久久综合五月天婷婷伊人| 欧美三级电影在线看| 成人aa视频在线观看| 久久精品99国产精品日本| 一区二区三区在线免费视频| 国产亚洲欧美中文| 日韩欧美一区在线| 欧美色偷偷大香| 91性感美女视频| 成人开心网精品视频| 久久国产精品露脸对白| 日一区二区三区| 亚洲综合色在线| 亚洲少妇中出一区| 国产精品久久久久一区二区三区 | 免费在线观看一区二区三区| 亚洲综合视频在线观看| 亚洲欧美一区二区久久| 国产精品麻豆视频| 国产精品美女久久久久久久久| 久久综合久久综合九色| 日韩视频在线你懂得| 欧美精品aⅴ在线视频| 欧美性色黄大片| 欧美在线你懂的| 欧美美女激情18p| 欧美日韩dvd在线观看| 欧美婷婷六月丁香综合色| 色视频一区二区| 欧美三级视频在线| 欧美日韩三级一区| 欧美一区中文字幕| 日韩视频一区二区三区在线播放| 欧美一区二区三区爱爱| 欧美美女一区二区三区| 日韩欧美中文字幕公布| 精品国产一二三区| 久久精品亚洲精品国产欧美kt∨| 国产午夜精品在线观看| 国产精品萝li| 亚洲国产精品一区二区尤物区| 亚洲午夜一二三区视频| 日本美女视频一区二区| 久久精品久久精品| 国v精品久久久网| 99精品欧美一区二区三区小说 | 亚洲三级电影网站| 亚洲在线观看免费视频| 天堂在线一区二区| 极品少妇xxxx精品少妇偷拍| 国产99一区视频免费| 色诱视频网站一区| 欧美丰满高潮xxxx喷水动漫| 久久人人超碰精品| 亚洲人成亚洲人成在线观看图片| 一区二区三区在线视频免费观看| 男人的天堂久久精品| 风间由美一区二区三区在线观看| 91麻豆swag| 欧美成人一区二区三区片免费| 欧美国产日韩一二三区| 国产乱人伦偷精品视频不卡 | 午夜不卡av在线| 国产精品一线二线三线| 色悠悠亚洲一区二区| 日韩免费一区二区三区在线播放| 国产精品色呦呦| 日韩精品电影一区亚洲| 成人avav影音| 日韩一二在线观看| √…a在线天堂一区| 麻豆91精品91久久久的内涵| caoporm超碰国产精品| 日韩欧美国产午夜精品| 综合中文字幕亚洲| 精一区二区三区| 欧美无人高清视频在线观看| 久久嫩草精品久久久精品| 亚洲午夜精品一区二区三区他趣| 国产美女视频一区| 欧美一区三区四区| 亚洲精品少妇30p| 国产成人免费视频| 91精品国产综合久久福利软件| 成人欧美一区二区三区在线播放| 日韩中文字幕麻豆| 在线视频中文字幕一区二区| 久久久久久久综合色一本| 午夜欧美大尺度福利影院在线看| 成人动漫中文字幕| 久久这里都是精品| 蜜桃视频在线一区| 欧美日韩精品一区二区三区| 亚洲视频一区在线| 国产99精品国产| 精品国产免费人成电影在线观看四季| 亚洲综合激情另类小说区| av资源站一区| 国产欧美日韩不卡| 国产精品一区专区| 久久久久久夜精品精品免费| 午夜精品福利一区二区三区av | 欧美理论片在线| 亚洲欧美日韩在线不卡| www.色精品| 国产精品美女久久福利网站| 国产成人av福利| 久久久久成人黄色影片| 青青草成人在线观看| 日韩一级大片在线观看| 奇米精品一区二区三区在线观看一| 欧美日韩色一区| 蜜臀久久99精品久久久久宅男 |