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

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

?? md5.c

?? 這是一個(gè)嵌入式系統(tǒng)上運(yùn)行的輕量級數(shù)據(jù)庫
?? C
字號:
/*** SQLite uses this code for testing only.  It is not a part of** the SQLite library.  This file implements two new TCL commands** "md5" and "md5file" that compute md5 checksums on arbitrary text** and on complete files.  These commands are used by the "testfixture"** program to help verify the correct operation of the SQLite library.**** The original use of these TCL commands was to test the ROLLBACK** feature of SQLite.  First compute the MD5-checksum of the database.** Then make some changes but rollback the changes rather than commit** them.  Compute a second MD5-checksum of the file and verify that the** two checksums are the same.  Such is the original use of this code.** New uses may have been added since this comment was written.*//* * This code implements the MD5 message-digest algorithm. * The algorithm is due to Ron Rivest.  This code was * written by Colin Plumb in 1993, no copyright is claimed. * This code is in the public domain; do with it what you wish. * * Equivalent code is available from RSA Data Security, Inc. * This code has been tested against that, and is equivalent, * except that you don't need to include two pages of legalese * with every copy. * * To compute the message digest of a chunk of bytes, declare an * MD5Context structure, pass it to MD5Init, call MD5Update as * needed on buffers full of bytes, and then call MD5Final, which * will fill a supplied 16-byte array with the digest. */#include <tcl.h>#include <string.h>#include "sqlite.h"/* * If compiled on a machine that doesn't have a 32-bit integer, * you just set "uint32" to the appropriate datatype for an * unsigned 32-bit integer.  For example: * *       cc -Duint32='unsigned long' md5.c * */#ifndef uint32#  define uint32 unsigned int#endifstruct Context {  uint32 buf[4];  uint32 bits[2];  unsigned char in[64];};typedef char MD5Context[88];/* * Note: this code is harmless on little-endian machines. */static void byteReverse (unsigned char *buf, unsigned longs){        uint32 t;        do {                t = (uint32)((unsigned)buf[3]<<8 | buf[2]) << 16 |                            ((unsigned)buf[1]<<8 | buf[0]);                *(uint32 *)buf = t;                buf += 4;        } while (--longs);}/* The four core functions - F1 is optimized somewhat *//* #define F1(x, y, z) (x & y | ~x & z) */#define F1(x, y, z) (z ^ (x & (y ^ z)))#define F2(x, y, z) F1(z, x, y)#define F3(x, y, z) (x ^ y ^ z)#define F4(x, y, z) (y ^ (x | ~z))/* This is the central step in the MD5 algorithm. */#define MD5STEP(f, w, x, y, z, data, s) \        ( w += f(x, y, z) + data,  w = w<<s | w>>(32-s),  w += x )/* * The core of the MD5 algorithm, this alters an existing MD5 hash to * reflect the addition of 16 longwords of new data.  MD5Update blocks * the data and converts bytes into longwords for this routine. */static void MD5Transform(uint32 buf[4], const uint32 in[16]){        register uint32 a, b, c, d;        a = buf[0];        b = buf[1];        c = buf[2];        d = buf[3];        MD5STEP(F1, a, b, c, d, in[ 0]+0xd76aa478,  7);        MD5STEP(F1, d, a, b, c, in[ 1]+0xe8c7b756, 12);        MD5STEP(F1, c, d, a, b, in[ 2]+0x242070db, 17);        MD5STEP(F1, b, c, d, a, in[ 3]+0xc1bdceee, 22);        MD5STEP(F1, a, b, c, d, in[ 4]+0xf57c0faf,  7);        MD5STEP(F1, d, a, b, c, in[ 5]+0x4787c62a, 12);        MD5STEP(F1, c, d, a, b, in[ 6]+0xa8304613, 17);        MD5STEP(F1, b, c, d, a, in[ 7]+0xfd469501, 22);        MD5STEP(F1, a, b, c, d, in[ 8]+0x698098d8,  7);        MD5STEP(F1, d, a, b, c, in[ 9]+0x8b44f7af, 12);        MD5STEP(F1, c, d, a, b, in[10]+0xffff5bb1, 17);        MD5STEP(F1, b, c, d, a, in[11]+0x895cd7be, 22);        MD5STEP(F1, a, b, c, d, in[12]+0x6b901122,  7);        MD5STEP(F1, d, a, b, c, in[13]+0xfd987193, 12);        MD5STEP(F1, c, d, a, b, in[14]+0xa679438e, 17);        MD5STEP(F1, b, c, d, a, in[15]+0x49b40821, 22);        MD5STEP(F2, a, b, c, d, in[ 1]+0xf61e2562,  5);        MD5STEP(F2, d, a, b, c, in[ 6]+0xc040b340,  9);        MD5STEP(F2, c, d, a, b, in[11]+0x265e5a51, 14);        MD5STEP(F2, b, c, d, a, in[ 0]+0xe9b6c7aa, 20);        MD5STEP(F2, a, b, c, d, in[ 5]+0xd62f105d,  5);        MD5STEP(F2, d, a, b, c, in[10]+0x02441453,  9);        MD5STEP(F2, c, d, a, b, in[15]+0xd8a1e681, 14);        MD5STEP(F2, b, c, d, a, in[ 4]+0xe7d3fbc8, 20);        MD5STEP(F2, a, b, c, d, in[ 9]+0x21e1cde6,  5);        MD5STEP(F2, d, a, b, c, in[14]+0xc33707d6,  9);        MD5STEP(F2, c, d, a, b, in[ 3]+0xf4d50d87, 14);        MD5STEP(F2, b, c, d, a, in[ 8]+0x455a14ed, 20);        MD5STEP(F2, a, b, c, d, in[13]+0xa9e3e905,  5);        MD5STEP(F2, d, a, b, c, in[ 2]+0xfcefa3f8,  9);        MD5STEP(F2, c, d, a, b, in[ 7]+0x676f02d9, 14);        MD5STEP(F2, b, c, d, a, in[12]+0x8d2a4c8a, 20);        MD5STEP(F3, a, b, c, d, in[ 5]+0xfffa3942,  4);        MD5STEP(F3, d, a, b, c, in[ 8]+0x8771f681, 11);        MD5STEP(F3, c, d, a, b, in[11]+0x6d9d6122, 16);        MD5STEP(F3, b, c, d, a, in[14]+0xfde5380c, 23);        MD5STEP(F3, a, b, c, d, in[ 1]+0xa4beea44,  4);        MD5STEP(F3, d, a, b, c, in[ 4]+0x4bdecfa9, 11);        MD5STEP(F3, c, d, a, b, in[ 7]+0xf6bb4b60, 16);        MD5STEP(F3, b, c, d, a, in[10]+0xbebfbc70, 23);        MD5STEP(F3, a, b, c, d, in[13]+0x289b7ec6,  4);        MD5STEP(F3, d, a, b, c, in[ 0]+0xeaa127fa, 11);        MD5STEP(F3, c, d, a, b, in[ 3]+0xd4ef3085, 16);        MD5STEP(F3, b, c, d, a, in[ 6]+0x04881d05, 23);        MD5STEP(F3, a, b, c, d, in[ 9]+0xd9d4d039,  4);        MD5STEP(F3, d, a, b, c, in[12]+0xe6db99e5, 11);        MD5STEP(F3, c, d, a, b, in[15]+0x1fa27cf8, 16);        MD5STEP(F3, b, c, d, a, in[ 2]+0xc4ac5665, 23);        MD5STEP(F4, a, b, c, d, in[ 0]+0xf4292244,  6);        MD5STEP(F4, d, a, b, c, in[ 7]+0x432aff97, 10);        MD5STEP(F4, c, d, a, b, in[14]+0xab9423a7, 15);        MD5STEP(F4, b, c, d, a, in[ 5]+0xfc93a039, 21);        MD5STEP(F4, a, b, c, d, in[12]+0x655b59c3,  6);        MD5STEP(F4, d, a, b, c, in[ 3]+0x8f0ccc92, 10);        MD5STEP(F4, c, d, a, b, in[10]+0xffeff47d, 15);        MD5STEP(F4, b, c, d, a, in[ 1]+0x85845dd1, 21);        MD5STEP(F4, a, b, c, d, in[ 8]+0x6fa87e4f,  6);        MD5STEP(F4, d, a, b, c, in[15]+0xfe2ce6e0, 10);        MD5STEP(F4, c, d, a, b, in[ 6]+0xa3014314, 15);        MD5STEP(F4, b, c, d, a, in[13]+0x4e0811a1, 21);        MD5STEP(F4, a, b, c, d, in[ 4]+0xf7537e82,  6);        MD5STEP(F4, d, a, b, c, in[11]+0xbd3af235, 10);        MD5STEP(F4, c, d, a, b, in[ 2]+0x2ad7d2bb, 15);        MD5STEP(F4, b, c, d, a, in[ 9]+0xeb86d391, 21);        buf[0] += a;        buf[1] += b;        buf[2] += c;        buf[3] += d;}/* * Start MD5 accumulation.  Set bit count to 0 and buffer to mysterious * initialization constants. */static void MD5Init(MD5Context *pCtx){        struct Context *ctx = (struct Context *)pCtx;        ctx->buf[0] = 0x67452301;        ctx->buf[1] = 0xefcdab89;        ctx->buf[2] = 0x98badcfe;        ctx->buf[3] = 0x10325476;        ctx->bits[0] = 0;        ctx->bits[1] = 0;}/* * Update context to reflect the concatenation of another buffer full * of bytes. */static void MD5Update(MD5Context *pCtx, const unsigned char *buf, unsigned int len){        struct Context *ctx = (struct Context *)pCtx;        uint32 t;        /* Update bitcount */        t = ctx->bits[0];        if ((ctx->bits[0] = t + ((uint32)len << 3)) < t)                ctx->bits[1]++; /* Carry from low to high */        ctx->bits[1] += len >> 29;        t = (t >> 3) & 0x3f;    /* Bytes already in shsInfo->data */        /* Handle any leading odd-sized chunks */        if ( t ) {                unsigned char *p = (unsigned char *)ctx->in + t;                t = 64-t;                if (len < t) {                        memcpy(p, buf, len);                        return;                }                memcpy(p, buf, t);                byteReverse(ctx->in, 16);                MD5Transform(ctx->buf, (uint32 *)ctx->in);                buf += t;                len -= t;        }        /* Process data in 64-byte chunks */        while (len >= 64) {                memcpy(ctx->in, buf, 64);                byteReverse(ctx->in, 16);                MD5Transform(ctx->buf, (uint32 *)ctx->in);                buf += 64;                len -= 64;        }        /* Handle any remaining bytes of data. */        memcpy(ctx->in, buf, len);}/* * Final wrapup - pad to 64-byte boundary with the bit pattern  * 1 0* (64-bit count of bits processed, MSB-first) */static void MD5Final(unsigned char digest[16], MD5Context *pCtx){        struct Context *ctx = (struct Context *)pCtx;        unsigned count;        unsigned char *p;        /* Compute number of bytes mod 64 */        count = (ctx->bits[0] >> 3) & 0x3F;        /* Set the first char of padding to 0x80.  This is safe since there is           always at least one byte free */        p = ctx->in + count;        *p++ = 0x80;        /* Bytes of padding needed to make 64 bytes */        count = 64 - 1 - count;        /* Pad out to 56 mod 64 */        if (count < 8) {                /* Two lots of padding:  Pad the first block to 64 bytes */                memset(p, 0, count);                byteReverse(ctx->in, 16);                MD5Transform(ctx->buf, (uint32 *)ctx->in);                /* Now fill the next block with 56 bytes */                memset(ctx->in, 0, 56);        } else {                /* Pad block to 56 bytes */                memset(p, 0, count-8);        }        byteReverse(ctx->in, 14);        /* Append length in bits and transform */        ((uint32 *)ctx->in)[ 14 ] = ctx->bits[0];        ((uint32 *)ctx->in)[ 15 ] = ctx->bits[1];        MD5Transform(ctx->buf, (uint32 *)ctx->in);        byteReverse((unsigned char *)ctx->buf, 4);        memcpy(digest, ctx->buf, 16);        memset(ctx, 0, sizeof(ctx));    /* In case it's sensitive */}/*** Convert a digest into base-16.  digest should be declared as** "unsigned char digest[16]" in the calling function.  The MD5** digest is stored in the first 16 bytes.  zBuf should** be "char zBuf[33]".*/static void DigestToBase16(unsigned char *digest, char *zBuf){  static char const zEncode[] = "0123456789abcdef";  int i, j;  for(j=i=0; i<16; i++){    int a = digest[i];    zBuf[j++] = zEncode[(a>>4)&0xf];    zBuf[j++] = zEncode[a & 0xf];  }  zBuf[j] = 0;}/*** A TCL command for md5.  The argument is the text to be hashed.  The** Result is the hash in base64.  */static int md5_cmd(void*cd, Tcl_Interp *interp, int argc, const char **argv){  MD5Context ctx;  unsigned char digest[16];  if( argc!=2 ){    Tcl_AppendResult(interp,"wrong # args: should be \"", argv[0],         " TEXT\"", 0);    return TCL_ERROR;  }  MD5Init(&ctx);  MD5Update(&ctx, (unsigned char*)argv[1], (unsigned)strlen(argv[1]));  MD5Final(digest, &ctx);  DigestToBase16(digest, interp->result);  return TCL_OK;}/*** A TCL command to take the md5 hash of a file.  The argument is the** name of the file.*/static int md5file_cmd(void*cd, Tcl_Interp*interp, int argc, const char **argv){  FILE *in;  MD5Context ctx;  unsigned char digest[16];  char zBuf[10240];  if( argc!=2 ){    Tcl_AppendResult(interp,"wrong # args: should be \"", argv[0],         " FILENAME\"", 0);    return TCL_ERROR;  }  in = fopen(argv[1],"rb");  if( in==0 ){    Tcl_AppendResult(interp,"unable to open file \"", argv[1],          "\" for reading", 0);    return TCL_ERROR;  }  MD5Init(&ctx);  for(;;){    int n;    n = fread(zBuf, 1, sizeof(zBuf), in);    if( n<=0 ) break;    MD5Update(&ctx, (unsigned char*)zBuf, (unsigned)n);  }  fclose(in);  MD5Final(digest, &ctx);  DigestToBase16(digest, interp->result);  return TCL_OK;}/*** Register the two TCL commands above with the TCL interpreter.*/int Md5_Init(Tcl_Interp *interp){  Tcl_CreateCommand(interp, "md5", (Tcl_CmdProc*)md5_cmd, 0, 0);  Tcl_CreateCommand(interp, "md5file", (Tcl_CmdProc*)md5file_cmd, 0, 0);  return TCL_OK;}/*** During testing, the special md5sum() aggregate function is available.** inside SQLite.  The following routines implement that function.*/static void md5step(sqlite_func *context, int argc, const char **argv){  MD5Context *p;  int i;  if( argc<1 ) return;  p = sqlite_aggregate_context(context, sizeof(*p));  if( p==0 ) return;  if( sqlite_aggregate_count(context)==1 ){    MD5Init(p);  }  for(i=0; i<argc; i++){    if( argv[i] ){      MD5Update(p, (unsigned char*)argv[i], strlen(argv[i]));    }  }}static void md5finalize(sqlite_func *context){  MD5Context *p;  unsigned char digest[16];  char zBuf[33];  p = sqlite_aggregate_context(context, sizeof(*p));  MD5Final(digest,p);  DigestToBase16(digest, zBuf);  sqlite_set_result_string(context, zBuf, strlen(zBuf));}void Md5_Register(sqlite *db){  sqlite_create_aggregate(db, "md5sum", -1, md5step, md5finalize, 0);}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美亚洲自拍偷拍| 成人高清视频免费观看| 欧美精品在线观看播放| 日韩和欧美一区二区| 欧美一区二区精品在线| 久久99国产精品免费网站| 久久综合色天天久久综合图片| 久99久精品视频免费观看| 久久精品无码一区二区三区| 成人综合在线观看| 亚洲一区二区精品视频| 91精品国产麻豆国产自产在线| 久久国产尿小便嘘嘘尿| 久久久久久9999| 99re这里只有精品6| 亚洲高清中文字幕| 久久综合中文字幕| 99久久综合99久久综合网站| 亚洲第一电影网| 精品理论电影在线观看| 99视频一区二区| 午夜欧美在线一二页| 精品久久久久久久久久久久久久久久久| 国模娜娜一区二区三区| 亚洲美女视频在线观看| 日韩精品一区二区三区swag| 成人sese在线| 免费观看日韩电影| 亚洲欧洲日韩在线| 日韩欧美不卡在线观看视频| voyeur盗摄精品| 蜜臀久久久99精品久久久久久| 久久精品夜夜夜夜久久| 欧美日韩国产一区| 波多野结衣精品在线| 日韩激情一二三区| 亚洲欧美日韩人成在线播放| 欧美成人三级在线| 欧美三级电影在线观看| 成人小视频免费在线观看| 天天影视网天天综合色在线播放| 亚洲国产精品激情在线观看 | 一区二区三区在线视频免费| 制服.丝袜.亚洲.中文.综合| av在线播放成人| 国产一区二区毛片| 日本美女一区二区三区视频| 亚洲欧美日韩小说| 亚洲国产成人私人影院tom| 欧美一二三在线| 91国产成人在线| 不卡的av在线播放| 国产一区二区三区精品欧美日韩一区二区三区 | 激情国产一区二区| 亚洲午夜精品网| 亚洲婷婷综合久久一本伊一区| 精品福利在线导航| 日韩欧美一区在线观看| 在线观看日韩精品| 99久久精品国产网站| 国产成人精品一区二区三区四区| 免费xxxx性欧美18vr| 亚洲aaa精品| 亚洲一区二区三区四区五区黄 | 亚洲欧美色一区| 中文幕一区二区三区久久蜜桃| 欧美精品一区二区三区蜜桃| 日韩一区二区三区在线观看 | 狠狠色狠狠色综合系列| 日韩成人精品在线| 视频一区二区中文字幕| 午夜精品久久一牛影视| 亚洲妇熟xx妇色黄| 亚洲午夜免费视频| 亚洲国产欧美在线人成| 亚洲线精品一区二区三区八戒| 一区二区三区免费观看| 亚洲乱码中文字幕综合| 一区二区三区日韩精品| 亚洲一区二区成人在线观看| 亚洲色图清纯唯美| 亚洲色图一区二区| 亚洲高清免费观看| 日韩1区2区日韩1区2区| 久久精品国产成人一区二区三区| 美女性感视频久久| 黑人巨大精品欧美黑白配亚洲| 精品一区二区三区影院在线午夜| 精品亚洲成a人| 国产成人在线免费| 色综合中文综合网| 国产精品丝袜在线| 国产精品午夜春色av| 亚洲精品日产精品乱码不卡| 亚洲与欧洲av电影| 免费成人av资源网| 国产sm精品调教视频网站| 99re热这里只有精品免费视频| 在线欧美日韩精品| 欧美一区三区四区| 国产性色一区二区| 亚洲精品免费在线播放| 石原莉奈在线亚洲三区| 精品无码三级在线观看视频| 国产91高潮流白浆在线麻豆| 色拍拍在线精品视频8848| 91麻豆精品久久久久蜜臀 | 精品视频一区二区三区免费| 91精品婷婷国产综合久久性色| 久久综合九色综合欧美亚洲| 国产精品二三区| 天天射综合影视| 国产成人av影院| 欧美中文字幕一区二区三区亚洲| 欧美一区二区人人喊爽| 国产精品夫妻自拍| 青青草精品视频| 暴力调教一区二区三区| 91精品国产综合久久小美女| 国产欧美一区二区三区沐欲| 亚洲综合免费观看高清完整版在线 | 亚洲一区二区四区蜜桃| 国产精品一区专区| 欧洲视频一区二区| 久久久久99精品一区| 亚洲成人午夜影院| 高清成人在线观看| 欧美一区二区免费视频| 亚洲欧美日韩系列| 国产成人aaa| 91精品国产91久久综合桃花 | 亚洲国产视频一区| 国产aⅴ综合色| 日韩欧美的一区| 亚洲成人在线免费| 99re在线视频这里只有精品| 精品国产91洋老外米糕| 午夜成人免费视频| 色综合天天视频在线观看| 欧美va亚洲va| 天天爽夜夜爽夜夜爽精品视频| 91片在线免费观看| 久久精品视频一区二区三区| 日本视频免费一区| 欧美日韩一区二区三区在线看| 国产精品久久午夜夜伦鲁鲁| 韩国在线一区二区| 欧美一级免费观看| 偷拍自拍另类欧美| 欧美性大战久久| 一区二区三区中文字幕电影| www.一区二区| 国产精品欧美精品| 国产91精品一区二区麻豆亚洲| 精品久久久三级丝袜| 偷偷要91色婷婷| 制服.丝袜.亚洲.另类.中文 | 最新不卡av在线| 成人午夜视频网站| 久久久99久久精品欧美| 激情综合网最新| 久久―日本道色综合久久 | 成人91在线观看| 国产精品青草久久| 成+人+亚洲+综合天堂| 国产精品无人区| www.亚洲国产| 亚洲精品少妇30p| 欧美午夜片在线看| 五月综合激情网| 日韩一二三区视频| 黄一区二区三区| 国产亚洲欧美在线| 成人av电影在线播放| 亚洲欧美一区二区三区国产精品| jvid福利写真一区二区三区| 亚洲美女屁股眼交| 欧美高清视频一二三区| 乱一区二区av| 国产精品久久久久久久久果冻传媒| 粉嫩嫩av羞羞动漫久久久| 中文字幕在线观看一区二区| 91欧美激情一区二区三区成人| 一区二区三区日韩欧美精品| 欧美精品xxxxbbbb| 精品一区中文字幕| 国产精品卡一卡二| 在线一区二区视频| 日韩在线播放一区二区| 亚洲精品一区二区三区影院| 国产在线麻豆精品观看| 中文字幕五月欧美| 欧美日韩中字一区| 精品一区二区三区不卡| 亚洲欧洲性图库| 欧美一区二区视频在线观看2020 | 国产亚洲精品7777| 91黄视频在线| 精品一区二区综合| 亚洲人午夜精品天堂一二香蕉|