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

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

?? md5.c

?? MD5的暴力破解源碼 -MD5的暴力破解源碼
?? C
字號:
/*
  Copyright (C) 1999 Aladdin Enterprises.  All rights reserved.

  This software is provided 'as-is', without any express or implied
  warranty.  In no event will the authors be held liable for any damages
  arising from the use of this software.

  Permission is granted to anyone to use this software for any purpose,
  including commercial applications, and to alter it and redistribute it
  freely, subject to the following restrictions:

  1. The origin of this software must not be misrepresented; you must not
     claim that you wrote the original software. If you use this software
     in a product, an acknowledgment in the product documentation would be
     appreciated but is not required.
  2. Altered source versions must be plainly marked as such, and must not be
     misrepresented as being the original software.
  3. This notice may not be removed or altered from any source distribution.

  L. Peter Deutsch
  ghost@aladdin.com

 */
/*$Id: md5.c,v 1.1.1.1 2001/05/11 05:23:07 valaxer Exp $ */
/*
  Independent implementation of MD5 (RFC 1321).

  This code implements the MD5 Algorithm defined in RFC 1321.
  It is derived directly from the text of the RFC and not from the
  reference implementation.

  The original and principal author of md5.c is L. Peter Deutsch
  <ghost@aladdin.com>.  Other authors are noted in the change history
  that follows (in reverse chronological order):

  1999-11-04 lpd Edited comments slightly for automatic TOC extraction.
  1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5).
  1999-05-03 lpd Original version.
 */

#include "md5.h"

#ifdef TEST
/*
 * Compile with -DTEST to create a self-contained executable test program.
 * The test program should print out the same values as given in section
 * A.5 of RFC 1321, reproduced below.
 */
#include <string.h>
main()
{
    static const char *const test[7] = {
	"", /*d41d8cd98f00b204e9800998ecf8427e*/
	"945399884.61923487334tuvga", /*0cc175b9c0f1b6a831c399e269772661*/
	"abc", /*900150983cd24fb0d6963f7d28e17f72*/
	"message digest", /*f96b697d7cb7938d525a2f31aaf161d0*/
	"abcdefghijklmnopqrstuvwxyz", /*c3fcd3d76192e4007dfb496cca67e13b*/
	"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
				/*d174ab98d277d9f5a5611c2c9f419d9f*/
	"12345678901234567890123456789012345678901234567890123456789012345678901234567890" /*57edf4a22be3c955ac49da2e2107b67a*/
    };
    int i;

    for (i = 0; i < 7; ++i) {
	md5_state_t state;
	md5_byte_t digest[16];
	int di;

	md5_init(&state);
	md5_append(&state, (const md5_byte_t *)test[i], strlen(test[i]));
	md5_finish(&state, digest);
	printf("MD5 (\"%s\") = ", test[i]);
	for (di = 0; di < 16; ++di)
	    printf("%02x", digest[di]);
	printf("\n");
    }
    return 0;
}
#endif /* TEST */


/*
 * For reference, here is the program that computed the T values.
 */
#if 0
#include <math.h>
main()
{
    int i;
    for (i = 1; i <= 64; ++i) {
	unsigned long v = (unsigned long)(4294967296.0 * fabs(sin((double)i)));
	printf("#define T%d 0x%08lx\n", i, v);
    }
    return 0;
}
#endif
/*
 * End of T computation program.
 */
#define T1 0xd76aa478
#define T2 0xe8c7b756
#define T3 0x242070db
#define T4 0xc1bdceee
#define T5 0xf57c0faf
#define T6 0x4787c62a
#define T7 0xa8304613
#define T8 0xfd469501
#define T9 0x698098d8
#define T10 0x8b44f7af
#define T11 0xffff5bb1
#define T12 0x895cd7be
#define T13 0x6b901122
#define T14 0xfd987193
#define T15 0xa679438e
#define T16 0x49b40821
#define T17 0xf61e2562
#define T18 0xc040b340
#define T19 0x265e5a51
#define T20 0xe9b6c7aa
#define T21 0xd62f105d
#define T22 0x02441453
#define T23 0xd8a1e681
#define T24 0xe7d3fbc8
#define T25 0x21e1cde6
#define T26 0xc33707d6
#define T27 0xf4d50d87
#define T28 0x455a14ed
#define T29 0xa9e3e905
#define T30 0xfcefa3f8
#define T31 0x676f02d9
#define T32 0x8d2a4c8a
#define T33 0xfffa3942
#define T34 0x8771f681
#define T35 0x6d9d6122
#define T36 0xfde5380c
#define T37 0xa4beea44
#define T38 0x4bdecfa9
#define T39 0xf6bb4b60
#define T40 0xbebfbc70
#define T41 0x289b7ec6
#define T42 0xeaa127fa
#define T43 0xd4ef3085
#define T44 0x04881d05
#define T45 0xd9d4d039
#define T46 0xe6db99e5
#define T47 0x1fa27cf8
#define T48 0xc4ac5665
#define T49 0xf4292244
#define T50 0x432aff97
#define T51 0xab9423a7
#define T52 0xfc93a039
#define T53 0x655b59c3
#define T54 0x8f0ccc92
#define T55 0xffeff47d
#define T56 0x85845dd1
#define T57 0x6fa87e4f
#define T58 0xfe2ce6e0
#define T59 0xa3014314
#define T60 0x4e0811a1
#define T61 0xf7537e82
#define T62 0xbd3af235
#define T63 0x2ad7d2bb
#define T64 0xeb86d391

static void
md5_process(md5_state_t *pms, const md5_byte_t *data /*[64]*/)
{
    md5_word_t
	a = pms->abcd[0], b = pms->abcd[1],
	c = pms->abcd[2], d = pms->abcd[3];
    md5_word_t t;

#ifndef ARCH_IS_BIG_ENDIAN
# define ARCH_IS_BIG_ENDIAN 1	/* slower, default implementation */
#endif
#if ARCH_IS_BIG_ENDIAN

    /*
     * On big-endian machines, we must arrange the bytes in the right
     * order.  (This also works on machines of unknown byte order.)
     */
    md5_word_t X[16];
    const md5_byte_t *xp = data;
    int i;

    for (i = 0; i < 16; ++i, xp += 4)
	X[i] = xp[0] + (xp[1] << 8) + (xp[2] << 16) + (xp[3] << 24);

#else  /* !ARCH_IS_BIG_ENDIAN */

    /*
     * On little-endian machines, we can process properly aligned data
     * without copying it.
     */
    md5_word_t xbuf[16];
    const md5_word_t *X;

    if (!((data - (const md5_byte_t *)0) & 3)) {
	/* data are properly aligned */
	X = (const md5_word_t *)data;
    } else {
	/* not aligned */
	memcpy(xbuf, data, 64);
	X = xbuf;
    }
#endif

#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32 - (n))))

    /* Round 1. */
    /* Let [abcd k s i] denote the operation
       a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */
#define F(x, y, z) (((x) & (y)) | (~(x) & (z)))
#define SET(a, b, c, d, k, s, Ti)\
  t = a + F(b,c,d) + X[k] + Ti;\
  a = ROTATE_LEFT(t, s) + b
    /* Do the following 16 operations. */
    SET(a, b, c, d,  0,  7,  T1);
    SET(d, a, b, c,  1, 12,  T2);
    SET(c, d, a, b,  2, 17,  T3);
    SET(b, c, d, a,  3, 22,  T4);
    SET(a, b, c, d,  4,  7,  T5);
    SET(d, a, b, c,  5, 12,  T6);
    SET(c, d, a, b,  6, 17,  T7);
    SET(b, c, d, a,  7, 22,  T8);
    SET(a, b, c, d,  8,  7,  T9);
    SET(d, a, b, c,  9, 12, T10);
    SET(c, d, a, b, 10, 17, T11);
    SET(b, c, d, a, 11, 22, T12);
    SET(a, b, c, d, 12,  7, T13);
    SET(d, a, b, c, 13, 12, T14);
    SET(c, d, a, b, 14, 17, T15);
    SET(b, c, d, a, 15, 22, T16);
#undef SET

     /* Round 2. */
     /* Let [abcd k s i] denote the operation
          a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */
#define G(x, y, z) (((x) & (z)) | ((y) & ~(z)))
#define SET(a, b, c, d, k, s, Ti)\
  t = a + G(b,c,d) + X[k] + Ti;\
  a = ROTATE_LEFT(t, s) + b
     /* Do the following 16 operations. */
    SET(a, b, c, d,  1,  5, T17);
    SET(d, a, b, c,  6,  9, T18);
    SET(c, d, a, b, 11, 14, T19);
    SET(b, c, d, a,  0, 20, T20);
    SET(a, b, c, d,  5,  5, T21);
    SET(d, a, b, c, 10,  9, T22);
    SET(c, d, a, b, 15, 14, T23);
    SET(b, c, d, a,  4, 20, T24);
    SET(a, b, c, d,  9,  5, T25);
    SET(d, a, b, c, 14,  9, T26);
    SET(c, d, a, b,  3, 14, T27);
    SET(b, c, d, a,  8, 20, T28);
    SET(a, b, c, d, 13,  5, T29);
    SET(d, a, b, c,  2,  9, T30);
    SET(c, d, a, b,  7, 14, T31);
    SET(b, c, d, a, 12, 20, T32);
#undef SET

     /* Round 3. */
     /* Let [abcd k s t] denote the operation
          a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */
#define H(x, y, z) ((x) ^ (y) ^ (z))
#define SET(a, b, c, d, k, s, Ti)\
  t = a + H(b,c,d) + X[k] + Ti;\
  a = ROTATE_LEFT(t, s) + b
     /* Do the following 16 operations. */
    SET(a, b, c, d,  5,  4, T33);
    SET(d, a, b, c,  8, 11, T34);
    SET(c, d, a, b, 11, 16, T35);
    SET(b, c, d, a, 14, 23, T36);
    SET(a, b, c, d,  1,  4, T37);
    SET(d, a, b, c,  4, 11, T38);
    SET(c, d, a, b,  7, 16, T39);
    SET(b, c, d, a, 10, 23, T40);
    SET(a, b, c, d, 13,  4, T41);
    SET(d, a, b, c,  0, 11, T42);
    SET(c, d, a, b,  3, 16, T43);
    SET(b, c, d, a,  6, 23, T44);
    SET(a, b, c, d,  9,  4, T45);
    SET(d, a, b, c, 12, 11, T46);
    SET(c, d, a, b, 15, 16, T47);
    SET(b, c, d, a,  2, 23, T48);
#undef SET

     /* Round 4. */
     /* Let [abcd k s t] denote the operation
          a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */
#define I(x, y, z) ((y) ^ ((x) | ~(z)))
#define SET(a, b, c, d, k, s, Ti)\
  t = a + I(b,c,d) + X[k] + Ti;\
  a = ROTATE_LEFT(t, s) + b
     /* Do the following 16 operations. */
    SET(a, b, c, d,  0,  6, T49);
    SET(d, a, b, c,  7, 10, T50);
    SET(c, d, a, b, 14, 15, T51);
    SET(b, c, d, a,  5, 21, T52);
    SET(a, b, c, d, 12,  6, T53);
    SET(d, a, b, c,  3, 10, T54);
    SET(c, d, a, b, 10, 15, T55);
    SET(b, c, d, a,  1, 21, T56);
    SET(a, b, c, d,  8,  6, T57);
    SET(d, a, b, c, 15, 10, T58);
    SET(c, d, a, b,  6, 15, T59);
    SET(b, c, d, a, 13, 21, T60);
    SET(a, b, c, d,  4,  6, T61);
    SET(d, a, b, c, 11, 10, T62);
    SET(c, d, a, b,  2, 15, T63);
    SET(b, c, d, a,  9, 21, T64);
#undef SET

     /* Then perform the following additions. (That is increment each
        of the four registers by the value it had before this block
        was started.) */
    pms->abcd[0] += a;
    pms->abcd[1] += b;
    pms->abcd[2] += c;
    pms->abcd[3] += d;
}

void
md5_init(md5_state_t *pms)
{
    pms->count[0] = pms->count[1] = 0;
    pms->abcd[0] = 0x67452301;
    pms->abcd[1] = 0xefcdab89;
    pms->abcd[2] = 0x98badcfe;
    pms->abcd[3] = 0x10325476;
}

void
md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes)
{
    const md5_byte_t *p = data;
    int left = nbytes;
    int offset = (pms->count[0] >> 3) & 63;
    md5_word_t nbits = (md5_word_t)(nbytes << 3);

    if (nbytes <= 0)
	return;

    /* Update the message length. */
    pms->count[1] += nbytes >> 29;
    pms->count[0] += nbits;
    if (pms->count[0] < nbits)
	pms->count[1]++;

    /* Process an initial partial block. */
    if (offset) {
	int copy = (offset + nbytes > 64 ? 64 - offset : nbytes);

	memcpy(pms->buf + offset, p, copy);
	if (offset + copy < 64)
	    return;
	p += copy;
	left -= copy;
	md5_process(pms, pms->buf);
    }

    /* Process full blocks. */
    for (; left >= 64; p += 64, left -= 64)
	md5_process(pms, p);

    /* Process a final partial block. */
    if (left)
	memcpy(pms->buf, p, left);
}

void
md5_finish(md5_state_t *pms, md5_byte_t digest[16])
{
    static const md5_byte_t pad[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
    };
    md5_byte_t data[8];
    int i;

    /* Save the length before padding. */
    for (i = 0; i < 8; ++i)
	data[i] = (md5_byte_t)(pms->count[i >> 2] >> ((i & 3) << 3));
    /* Pad to 56 bytes mod 64. */
    md5_append(pms, pad, ((55 - (pms->count[0] >> 3)) & 63) + 1);
    /* Append the length. */
    md5_append(pms, data, 8);
    for (i = 0; i < 16; ++i)
	digest[i] = (md5_byte_t)(pms->abcd[i >> 2] >> ((i & 3) << 3));
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜久久久久久久久久久| 国产无遮挡一区二区三区毛片日本| |精品福利一区二区三区| 成人午夜在线播放| 欧美国产精品v| www.亚洲激情.com| 夜夜爽夜夜爽精品视频| 欧美猛男超大videosgay| 婷婷国产在线综合| 日韩免费电影一区| 丁香天五香天堂综合| 亚洲免费毛片网站| 337p亚洲精品色噜噜噜| 国产精品77777| 亚洲综合免费观看高清完整版在线 | 亚洲色图制服诱惑 | 欧美午夜不卡在线观看免费| 午夜影院在线观看欧美| 亚洲黄色性网站| 91精品国产综合久久国产大片| 国产综合成人久久大片91| 国产精品私人影院| 欧美日韩在线精品一区二区三区激情| 性久久久久久久久久久久| 欧美一区二区三区视频| 一区二区三区日韩欧美精品| 欧美一区二区成人| 精品一区二区在线看| 国产人妖乱国产精品人妖| 97se亚洲国产综合自在线不卡 | 91小视频免费看| 一级日本不卡的影视| 91精品免费观看| 成人在线综合网| 一区二区日韩av| 精品福利在线导航| 成人av电影在线网| 亚洲成av人片在线| 久久精品水蜜桃av综合天堂| 99精品热视频| 日本亚洲欧美天堂免费| 国产欧美日韩久久| 欧美精品高清视频| 国产精品一二三四区| 一区二区三区欧美| 精品卡一卡二卡三卡四在线| 色综合欧美在线| 亚洲在线视频网站| 国产精品三级久久久久三级| eeuss国产一区二区三区| 午夜精品影院在线观看| 国产欧美一区二区三区鸳鸯浴| 91久久一区二区| 麻豆精品国产91久久久久久| 亚洲日本va午夜在线电影| 91精品国产综合久久精品性色| 国产成人综合视频| 天堂成人免费av电影一区| 亚洲国产精品国自产拍av| 欧美性生活一区| 高清国产一区二区| 日本少妇一区二区| 亚洲精品视频观看| 国产伦理精品不卡| 国产无一区二区| 欧美一二三区精品| 亚洲人成小说网站色在线| 精品国产免费视频| 国产91精品露脸国语对白| 国产裸体歌舞团一区二区| 婷婷成人激情在线网| 亚洲乱码一区二区三区在线观看| 欧美精品一区二区三区蜜臀| 日韩女优av电影| 欧美日韩在线观看一区二区| 日本韩国一区二区| 成人av先锋影音| 国产成人av影院| 国产在线国偷精品免费看| 麻豆久久久久久| 天堂蜜桃一区二区三区 | 在线观看视频一区二区欧美日韩 | 国产·精品毛片| 久草精品在线观看| 免费久久99精品国产| 亚洲高清视频中文字幕| 亚洲综合激情小说| 亚洲色图制服诱惑 | 91网址在线看| 日本韩国精品一区二区在线观看| 欧美成人一区二区三区片免费 | 日本女人一区二区三区| 亚洲福利视频一区| 亚洲自拍偷拍九九九| 伊人开心综合网| 亚洲免费看黄网站| 亚洲国产婷婷综合在线精品| 亚洲精品免费在线观看| 亚洲精品免费在线观看| 夜夜操天天操亚洲| 亚洲一二三四在线观看| 亚洲在线观看免费| 婷婷亚洲久悠悠色悠在线播放| 偷拍与自拍一区| 奇米色777欧美一区二区| 美女在线一区二区| 国产高清在线观看免费不卡| 久久精品国产**网站演员| 欧美aaaaa成人免费观看视频| 日韩av一区二| 亚洲国产wwwccc36天堂| 天堂久久久久va久久久久| 免费成人结看片| 国产精品18久久久久久久久| 成人黄色av网站在线| 色美美综合视频| 亚洲第一在线综合网站| 欧美xxxxxxxx| 国产精品色婷婷久久58| 综合欧美一区二区三区| 亚洲资源中文字幕| 久久国产生活片100| 成人性生交大片| 欧美日韩三级在线| 欧美丰满少妇xxxxx高潮对白| 在线播放国产精品二区一二区四区| 在线播放一区二区三区| 亚洲精品在线免费播放| 亚洲视频一二区| 日韩电影一区二区三区| 国产69精品久久99不卡| 欧美性色黄大片手机版| 精品三级在线观看| 中文字幕一区视频| 日韩精品电影在线观看| 成人理论电影网| 欧美日韩精品一区二区三区 | 亚洲成人黄色小说| 国产乱码精品1区2区3区| 一本色道久久综合亚洲aⅴ蜜桃 | 奇米888四色在线精品| 成人av网站免费| 日韩一区二区精品葵司在线 | 亚洲色图欧美偷拍| 国产乱码精品一品二品| 欧美日韩中文国产| 国产精品高潮呻吟久久| 全部av―极品视觉盛宴亚洲| 91网站最新网址| 久久久久青草大香线综合精品| 亚洲一区在线电影| 成人av集中营| 精品久久五月天| 午夜av区久久| 91视频在线观看| 国产精品免费aⅴ片在线观看| 麻豆高清免费国产一区| 色综合久久久久综合体| 国产日韩影视精品| 亚洲一区二区三区四区在线观看 | 一本一道久久a久久精品综合蜜臀| 欧美一区二区在线播放| 一区二区三区日韩欧美精品| 粉嫩蜜臀av国产精品网站| 日韩欧美高清dvd碟片| 成人欧美一区二区三区1314 | 亚洲国产激情av| 国产最新精品精品你懂的| 91精品国产综合久久香蕉的特点 | 亚洲h在线观看| 99久久99久久综合| 国产婷婷色一区二区三区| 精品午夜一区二区三区在线观看| 欧美日韩国产一二三| 亚洲免费视频成人| 色哟哟亚洲精品| 成人欧美一区二区三区黑人麻豆 | 国产精品一级在线| 精品精品国产高清a毛片牛牛| 视频精品一区二区| 欧美日韩在线播放三区四区| 曰韩精品一区二区| 欧美亚洲综合网| 一区二区在线观看不卡| 国产一区二区日韩精品| 欧美日韩国产综合视频在线观看| 中文字幕中文在线不卡住| 国产精品一区二区男女羞羞无遮挡 | 日韩av电影免费观看高清完整版 | 激情图区综合网| 精品国产乱码久久久久久免费| 奇米影视一区二区三区| 精品欧美一区二区在线观看| 精品亚洲国产成人av制服丝袜| 精品动漫一区二区三区在线观看| 精品一区二区三区免费视频| 久久综合久色欧美综合狠狠| 国产精品一区二区久激情瑜伽| 中文在线资源观看网站视频免费不卡| 成人久久久精品乱码一区二区三区|