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

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

?? md5sum.c

?? 手機嵌入式Linux下可用的busybox源碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* md5sum.c - Compute MD5 checksum of files or strings according to the *            definition of MD5 in RFC 1321 from April 1992. * Copyright (C) 1995-1999 Free Software Foundation, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; 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> *//* Hacked to work with BusyBox by Alfred M. Szmidt <ams@trillian.itslinux.org> *//* * June 29, 2001        Manuel Novoa III * * Added MD5SUM_SIZE_VS_SPEED configuration option. * * Current valid values, with data from my system for comparison, are: *   (using uClibc and running on linux-2.4.4.tar.bz2) *                     user times (sec)  text size (386) *     0 (fastest)         1.1                6144 *     1                   1.4                5392 *     2                   3.0                5088 *     3 (smallest)        5.1                4912 */#define MD5SUM_SIZE_VS_SPEED 2/**********************************************************************/#include <stdio.h>#include <errno.h>#include <ctype.h>#include <getopt.h>#include <stdlib.h>#include <string.h>#include <endian.h>#include <sys/types.h>#if defined HAVE_LIMITS_H# include <limits.h>#endif#include "busybox.h"/* For some silly reason, this file uses backwards TRUE and FALSE conventions */#undef TRUE#undef FALSE#define FALSE   ((int) 1)#define TRUE    ((int) 0)    /* It is unfortunate that C does not provide an operator for   cyclic rotation.  Hope the C compiler is smart enough.   gcc 2.95.4 seems to be --aaronl */#define CYCLIC(w, s) (w = (w << s) | (w >> (32 - s)))//----------------------------------------------------------------------------//--------md5.c//----------------------------------------------------------------------------/* 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. *//* Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.  *///----------------------------------------------------------------------------//--------md5.h//----------------------------------------------------------------------------/* md5.h - Declaration of functions and data types used for MD5 sum   computing library functions. */typedef u_int32_t md5_uint32;/* Structure to save state of computation between the single steps.  */struct md5_ctx{  md5_uint32 A;  md5_uint32 B;  md5_uint32 C;  md5_uint32 D;  md5_uint32 total[2];  md5_uint32 buflen;  char buffer[128];};/* * The following three functions are build up the low level used in * the functions `md5_stream' and `md5_buffer'. *//* Initialize structure containing state of computation.   (RFC 1321, 3.3: Step 3)  */static void md5_init_ctx __P ((struct md5_ctx *ctx));/* Starting with the result of former calls of this function (or the   initialization function update the context for the next LEN bytes   starting at BUFFER.   It is necessary that LEN is a multiple of 64!!! */static void md5_process_block __P ((const void *buffer, size_t len,				    struct md5_ctx *ctx));/* Starting with the result of former calls of this function (or the   initialization function update the context for the next LEN bytes   starting at BUFFER.   It is NOT required that LEN is a multiple of 64.  */static void md5_process_bytes __P ((const void *buffer, size_t len,				    struct md5_ctx *ctx));/* Process the remaining bytes in the buffer and put result from CTX   in first 16 bytes following RESBUF.  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.   IMPORTANT: On some systems it is required that RESBUF is correctly   aligned for a 32 bits value.  */static void *md5_finish_ctx __P ((struct md5_ctx *ctx, void *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.  */static int md5_stream __P ((FILE *stream, void *resblock));/* 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.  */static void *md5_buffer __P ((const char *buffer, size_t len, void *resblock));//----------------------------------------------------------------------------//--------end of md5.h//----------------------------------------------------------------------------/* Handle endian-ness */#if __BYTE_ORDER == __LITTLE_ENDIAN	#define SWAP(n) (n)#else	#define SWAP(n) ((n << 24) | ((n&65280)<<8) | ((n&16711680)>>8) | (n>>24))#endif#if MD5SUM_SIZE_VS_SPEED == 0/* 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, ...  */  };#endif/* Initialize structure containing state of computation.   (RFC 1321, 3.3: Step 3)  */void md5_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;}/* 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.  */static 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;#if MD5SUM_SIZE_VS_SPEED > 0  memset(&ctx->buffer[bytes], 0, pad);  ctx->buffer[bytes] = 0x80;#else  memcpy(&ctx->buffer[bytes], fillbuf, pad);#endif  /* 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);/* Put result from CTX in first 16 bytes following RESBUF.  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.   IMPORTANT: On some systems it is required that RESBUF is correctly   aligned for a 32 bits value.  */  ((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;}/* Compute MD5 message digest for bytes read from STREAM.  The   resulting message digest number will be written into the 16 bytes   beginning at RESBLOCK.  */static int md5_stream(FILE *stream, void *resblock){  /* Important: BLOCKSIZE must be a multiple of 64.  */static const int 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.  */static void *md5_buffer(const char *buffer, size_t 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);}static void md5_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.  */static void md5_process_block(const void *buffer, size_t len, struct md5_ctx *ctx){  md5_uint32 correct_words[16];  const md5_uint32 *words = buffer;  size_t nwords = len / sizeof(md5_uint32);  const md5_uint32 *endp = words + nwords;#if MD5SUM_SIZE_VS_SPEED > 0  static const md5_uint32 C_array[] = {      /* round 1 */      0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee,      0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501,      0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be,      0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821,      /* round 2 */      0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa,      0xd62f105d, 0x2441453,  0xd8a1e681, 0xe7d3fbc8,      0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed,      0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a,      /* round 3 */      0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c,      0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70,

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产伦理精品不卡| 国产一区二区成人久久免费影院 | 国产精品美女久久久久aⅴ | 欧美性三三影院| 26uuu色噜噜精品一区二区| 亚洲国产日产av| 成人性视频免费网站| 欧美成人a视频| 亚洲成va人在线观看| 972aa.com艺术欧美| 国产欧美日韩综合| 韩国三级在线一区| 欧美猛男男办公室激情| 亚洲欧美色综合| 成人国产在线观看| 久久久亚洲国产美女国产盗摄| 亚洲国产精品人人做人人爽| 成人免费视频一区二区| 久久久久久免费网| 欧美aaaaaa午夜精品| 欧美三级电影网| 亚洲亚洲精品在线观看| 色综合久久中文综合久久牛| 国产精品女同一区二区三区| 国产毛片精品视频| 亚洲精品在线一区二区| 蜜桃av噜噜一区二区三区小说| 欧美精品在线观看播放| 五月婷婷激情综合| 在线一区二区三区四区五区 | 加勒比av一区二区| 精品国产一区二区三区久久久蜜月| 丝袜美腿亚洲一区| 欧美日韩www| 日韩二区三区在线观看| 欧美精品在线一区二区三区| 亚洲sss视频在线视频| 欧美日韩在线免费视频| 三级不卡在线观看| 91精品欧美久久久久久动漫 | av不卡免费电影| 日本一区二区不卡视频| 99国产精品久久| 亚洲精品一二三| 欧美三级午夜理伦三级中视频| 亚洲综合在线第一页| 欧美日韩高清影院| 欧美a级理论片| 国产日本亚洲高清| 91在线观看高清| 亚洲国产一区视频| 日韩欧美三级在线| 国产精品77777| 亚洲精品视频在线观看网站| 欧美日本精品一区二区三区| 久久国产综合精品| 中文字幕中文字幕一区| 欧美三级视频在线观看| 激情六月婷婷综合| 亚洲欧美中日韩| 欧美日韩aaa| 国产一区二区三区久久久| 国产精品久久久久天堂| 欧美在线免费观看亚洲| 久久国产视频网| 中文字幕在线视频一区| 欧美日韩精品福利| 高清shemale亚洲人妖| 一区二区三区在线影院| 日韩欧美一区在线观看| 风间由美性色一区二区三区| 午夜私人影院久久久久| 国产视频一区不卡| 欧美日韩亚洲综合| 国产不卡一区视频| 蜜桃视频一区二区| 亚洲视频一区在线| 精品第一国产综合精品aⅴ| 不卡一区二区中文字幕| 久久精工是国产品牌吗| 亚洲精品一二三区| 久久综合狠狠综合久久激情| 欧美中文字幕一区二区三区亚洲| 久久av老司机精品网站导航| 亚洲精品网站在线观看| 国产日韩av一区| 欧美一区二区三区小说| 91成人免费在线视频| 国产精品羞羞答答xxdd| 秋霞影院一区二区| 一区二区三区中文字幕电影| 久久精品亚洲国产奇米99| 欧美精品日日鲁夜夜添| 91香蕉视频在线| 国产成人免费视频网站高清观看视频 | 从欧美一区二区三区| 看电视剧不卡顿的网站| 亚洲国产日韩精品| ...xxx性欧美| 国产欧美1区2区3区| 日韩欧美国产一区二区三区 | 日韩av中文字幕一区二区| 亚洲激情成人在线| 国产精品国产三级国产aⅴ中文| 精品国产乱码久久久久久老虎| 欧美日韩国产一区二区三区地区| 91小视频在线免费看| 91在线视频网址| 99久久精品国产一区二区三区| 国产成人激情av| 国产精品系列在线观看| 国模一区二区三区白浆| 麻豆国产精品视频| 欧美aaaaa成人免费观看视频| 五月婷婷久久综合| 免费在线观看精品| 麻豆精品久久精品色综合| 老司机免费视频一区二区三区| 日韩和欧美一区二区| 麻豆精品一区二区综合av| 九一九一国产精品| 黄色小说综合网站| 国产伦精品一区二区三区免费 | 国产日韩欧美高清| 国产精品视频一区二区三区不卡| 国产精品三级av在线播放| 国产精品国产成人国产三级 | 亚洲欧洲精品天堂一级| 亚洲欧美经典视频| 亚洲一二三四在线观看| 日韩av不卡在线观看| 国产一区二区三区综合| 风间由美中文字幕在线看视频国产欧美 | 免播放器亚洲一区| 久久99久久精品欧美| 国产精品自产自拍| 成人avav在线| 欧美日韩精品一区二区天天拍小说| 91.成人天堂一区| 26uuuu精品一区二区| 最新国产成人在线观看| 亚洲一区二区三区视频在线播放 | 99视频热这里只有精品免费| 色婷婷av一区二区三区软件 | 综合中文字幕亚洲| 肉色丝袜一区二区| 粉嫩在线一区二区三区视频| 色偷偷久久一区二区三区| 欧美一区二区三区视频免费| 国产色婷婷亚洲99精品小说| 亚洲一区二区中文在线| 国产原创一区二区| 欧美色区777第一页| 久久你懂得1024| 亚洲一区二区三区在线播放| 国产乱人伦精品一区二区在线观看| 91蜜桃免费观看视频| 日韩免费观看2025年上映的电影| 日本一区二区高清| 免费成人在线影院| 色综合天天视频在线观看| 日韩欧美中文字幕公布| 亚洲伦理在线免费看| 国产很黄免费观看久久| 欧美日韩免费一区二区三区| 国产偷国产偷亚洲高清人白洁| 亚洲第一在线综合网站| 成人黄色在线网站| 久久综合久久久久88| 亚洲成人动漫av| 99精品一区二区三区| 日韩精品一区二区三区四区视频| 一级做a爱片久久| 北条麻妃国产九九精品视频| 日韩精品在线一区二区| 午夜精品久久久久久久 | 亚洲美女在线一区| 国产一区二区在线影院| 欧美夫妻性生活| 亚洲一区二三区| 色哟哟在线观看一区二区三区| 久久久久久久久久久久电影| 日韩电影免费在线观看网站| 欧美亚一区二区| 亚洲免费毛片网站| 成人黄色国产精品网站大全在线免费观看| 欧美哺乳videos| 青娱乐精品视频在线| 欧美日本乱大交xxxxx| 亚洲已满18点击进入久久| 色婷婷av一区二区三区软件| 亚洲欧洲日产国产综合网| 粉嫩一区二区三区在线看| 日本一区二区三区免费乱视频| 另类小说视频一区二区| 欧美电影免费观看高清完整版在线 | 欧美亚洲国产一区二区三区va| 亚洲视频你懂的| 色综合久久久久网| 亚洲一级二级在线|