⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 md5.c

📁 华硕无线网卡 167G linux 驱动
💻 C
📖 第 1 页 / 共 3 页
字号:
	V(A8,FC,8C,C4),	V(A0,F0,3F,1A),	V(56,7D,2C,D8),	V(22,33,90,EF),	\	V(87,49,4E,C7),	V(D9,38,D1,C1),	V(8C,CA,A2,FE),	V(98,D4,0B,36),	\	V(A6,F5,81,CF),	V(A5,7A,DE,28),	V(DA,B7,8E,26),	V(3F,AD,BF,A4),	\	V(2C,3A,9D,E4),	V(50,78,92,0D),	V(6A,5F,CC,9B),	V(54,7E,46,62),	\	V(F6,8D,13,C2),	V(90,D8,B8,E8),	V(2E,39,F7,5E),	V(82,C3,AF,F5),	\	V(9F,5D,80,BE),	V(69,D0,93,7C),	V(6F,D5,2D,A9),	V(CF,25,12,B3),	\	V(C8,AC,99,3B),	V(10,18,7D,A7),	V(E8,9C,63,6E),	V(DB,3B,BB,7B),	\	V(CD,26,78,09),	V(6E,59,18,F4),	V(EC,9A,B7,01),	V(83,4F,9A,A8),	\	V(E6,95,6E,65),	V(AA,FF,E6,7E),	V(21,BC,CF,08),	V(EF,15,E8,E6),	\	V(BA,E7,9B,D9),	V(4A,6F,36,CE),	V(EA,9F,09,D4),	V(29,B0,7C,D6),	\	V(31,A4,B2,AF),	V(2A,3F,23,31),	V(C6,A5,94,30),	V(35,A2,66,C0),	\	V(74,4E,BC,37),	V(FC,82,CA,A6),	V(E0,90,D0,B0),	V(33,A7,D8,15),	\	V(F1,04,98,4A),	V(41,EC,DA,F7),	V(7F,CD,50,0E),	V(17,91,F6,2F),	\	V(76,4D,D6,8D),	V(43,EF,B0,4D),	V(CC,AA,4D,54),	V(E4,96,04,DF),	\	V(9E,D1,B5,E3),	V(4C,6A,88,1B),	V(C1,2C,1F,B8),	V(46,65,51,7F),	\	V(9D,5E,EA,04),	V(01,8C,35,5D),	V(FA,87,74,73),	V(FB,0B,41,2E),	\	V(B3,67,1D,5A),	V(92,DB,D2,52),	V(E9,10,56,33),	V(6D,D6,47,13),	\	V(9A,D7,61,8C),	V(37,A1,0C,7A),	V(59,F8,14,8E),	V(EB,13,3C,89),	\	V(CE,A9,27,EE),	V(B7,61,C9,35),	V(E1,1C,E5,ED),	V(7A,47,B1,3C),	\	V(9C,D2,DF,59),	V(55,F2,73,3F),	V(18,14,CE,79),	V(73,C7,37,BF),	\	V(53,F7,CD,EA),	V(5F,FD,AA,5B),	V(DF,3D,6F,14),	V(78,44,DB,86),	\	V(CA,AF,F3,81),	V(B9,68,C4,3E),	V(38,24,34,2C),	V(C2,A3,40,5F),	\	V(16,1D,C3,72),	V(BC,E2,25,0C),	V(28,3C,49,8B),	V(FF,0D,95,41),	\	V(39,A8,01,71),	V(08,0C,B3,DE),	V(D8,B4,E4,9C),	V(64,56,C1,90),	\	V(7B,CB,84,61),	V(D5,32,B6,70),	V(48,6C,5C,74),	V(D0,B8,57,42)#define	V(a,b,c,d) 0x##a##b##c##dstatic uint32 RT0[256] = { RT };#undef V#define	V(a,b,c,d) 0x##d##a##b##cstatic uint32 RT1[256] = { RT };#undef V#define	V(a,b,c,d) 0x##c##d##a##bstatic uint32 RT2[256] = { RT };#undef V#define	V(a,b,c,d) 0x##b##c##d##astatic uint32 RT3[256] = { RT };#undef V#undef RT/* round constants */static uint32 RCON[10] ={	0x01000000,	0x02000000,	0x04000000,	0x08000000,	0x10000000,	0x20000000,	0x40000000,	0x80000000,	0x1B000000,	0x36000000};/* key schedule	tables */static int KT_init = 1;static uint32 KT0[256];static uint32 KT1[256];static uint32 KT2[256];static uint32 KT3[256];/* platform-independant	32-bit integer manipulation	macros */#define	GET_UINT32(n,b,i)						\{												\	(n)	= (	(uint32) (b)[(i)	] << 24	)		\		| (	(uint32) (b)[(i) + 1] << 16	)		\		| (	(uint32) (b)[(i) + 2] <<  8	)		\		| (	(uint32) (b)[(i) + 3]		);		\}#define	PUT_UINT32(n,b,i)						\{												\	(b)[(i)	   ] = (uint8) ( (n) >>	24 );		\	(b)[(i)	+ 1] = (uint8) ( (n) >>	16 );		\	(b)[(i)	+ 2] = (uint8) ( (n) >>	 8 );		\	(b)[(i)	+ 3] = (uint8) ( (n)	   );		\}/* AES key scheduling routine */int	aes_set_key( aes_context *ctx, uint8 *key, int nbits ){	int	i;	uint32 *RK,	*SK;	switch(	nbits )	{		case 128: ctx->nr =	10;	break;		case 192: ctx->nr =	12;	break;		case 256: ctx->nr =	14;	break;		default	: return( 1	);	}	RK = ctx->erk;	for( i = 0;	i <	(nbits >> 5); i++ )	{		GET_UINT32(	RK[i], key,	i *	4 );	}	/* setup encryption	round keys */	switch(	nbits )	{	case 128:		for( i = 0;	i <	10;	i++, RK	+= 4 )		{			RK[4]  = RK[0] ^ RCON[i] ^						( FSb[ (uint8) ( RK[3] >> 16 ) ] <<	24 ) ^						( FSb[ (uint8) ( RK[3] >>  8 ) ] <<	16 ) ^						( FSb[ (uint8) ( RK[3]		 ) ] <<	 8 ) ^						( FSb[ (uint8) ( RK[3] >> 24 ) ]	   );			RK[5]  = RK[1] ^ RK[4];			RK[6]  = RK[2] ^ RK[5];			RK[7]  = RK[3] ^ RK[6];		}		break;	case 192:		for( i = 0;	i <	8; i++,	RK += 6	)		{			RK[6]  = RK[0] ^ RCON[i] ^						( FSb[ (uint8) ( RK[5] >> 16 ) ] <<	24 ) ^						( FSb[ (uint8) ( RK[5] >>  8 ) ] <<	16 ) ^						( FSb[ (uint8) ( RK[5]		 ) ] <<	 8 ) ^						( FSb[ (uint8) ( RK[5] >> 24 ) ]	   );			RK[7]  = RK[1] ^ RK[6];			RK[8]  = RK[2] ^ RK[7];			RK[9]  = RK[3] ^ RK[8];			RK[10] = RK[4] ^ RK[9];			RK[11] = RK[5] ^ RK[10];		}		break;	case 256:		for( i = 0;	i <	7; i++,	RK += 8	)		{			RK[8]  = RK[0] ^ RCON[i] ^						( FSb[ (uint8) ( RK[7] >> 16 ) ] <<	24 ) ^						( FSb[ (uint8) ( RK[7] >>  8 ) ] <<	16 ) ^						( FSb[ (uint8) ( RK[7]		 ) ] <<	 8 ) ^						( FSb[ (uint8) ( RK[7] >> 24 ) ]	   );			RK[9]  = RK[1] ^ RK[8];			RK[10] = RK[2] ^ RK[9];			RK[11] = RK[3] ^ RK[10];			RK[12] = RK[4] ^						( FSb[ (uint8) ( RK[11]	>> 24 )	] << 24	) ^						( FSb[ (uint8) ( RK[11]	>> 16 )	] << 16	) ^						( FSb[ (uint8) ( RK[11]	>>	8 )	] <<  8	) ^						( FSb[ (uint8) ( RK[11]		  )	]		);			RK[13] = RK[5] ^ RK[12];			RK[14] = RK[6] ^ RK[13];			RK[15] = RK[7] ^ RK[14];		}		break;	}	/* setup decryption	round keys */	if(	KT_init	)	{		for( i = 0;	i <	256; i++ )		{			KT0[i] = RT0[ FSb[i] ];			KT1[i] = RT1[ FSb[i] ];			KT2[i] = RT2[ FSb[i] ];			KT3[i] = RT3[ FSb[i] ];		}		KT_init	= 0;	}	SK = ctx->drk;	*SK++ =	*RK++;	*SK++ =	*RK++;	*SK++ =	*RK++;	*SK++ =	*RK++;	for( i = 1;	i <	ctx->nr; i++ )	{		RK -= 8;		*SK++ =	KT0[ (uint8) ( *RK >> 24 ) ] ^				KT1[ (uint8) ( *RK >> 16 ) ] ^				KT2[ (uint8) ( *RK >>  8 ) ] ^				KT3[ (uint8) ( *RK		 ) ]; RK++;		*SK++ =	KT0[ (uint8) ( *RK >> 24 ) ] ^				KT1[ (uint8) ( *RK >> 16 ) ] ^				KT2[ (uint8) ( *RK >>  8 ) ] ^				KT3[ (uint8) ( *RK		 ) ]; RK++;		*SK++ =	KT0[ (uint8) ( *RK >> 24 ) ] ^				KT1[ (uint8) ( *RK >> 16 ) ] ^				KT2[ (uint8) ( *RK >>  8 ) ] ^				KT3[ (uint8) ( *RK		 ) ]; RK++;		*SK++ =	KT0[ (uint8) ( *RK >> 24 ) ] ^				KT1[ (uint8) ( *RK >> 16 ) ] ^				KT2[ (uint8) ( *RK >>  8 ) ] ^				KT3[ (uint8) ( *RK		 ) ]; RK++;	}	RK -= 8;	*SK++ =	*RK++;	*SK++ =	*RK++;	*SK++ =	*RK++;	*SK++ =	*RK++;	return(	0 );}/* AES 128-bit block encryption	routine	*/void aes_encrypt(aes_context *ctx, uint8 input[16],	uint8 output[16] ){	uint32 *RK,	X0,	X1,	X2,	X3,	Y0,	Y1,	Y2,	Y3;	RK = ctx->erk;	GET_UINT32(	X0,	input,	0 ); X0	^= RK[0];	GET_UINT32(	X1,	input,	4 ); X1	^= RK[1];	GET_UINT32(	X2,	input,	8 ); X2	^= RK[2];	GET_UINT32(	X3,	input, 12 ); X3	^= RK[3];#define	AES_FROUND(X0,X1,X2,X3,Y0,Y1,Y2,Y3)		\{												\	RK += 4;									\												\	X0 = RK[0] ^ FT0[ (uint8) (	Y0 >> 24 ) ] ^	\				 FT1[ (uint8) (	Y1 >> 16 ) ] ^	\				 FT2[ (uint8) (	Y2 >>  8 ) ] ^	\				 FT3[ (uint8) (	Y3		 ) ];	\												\	X1 = RK[1] ^ FT0[ (uint8) (	Y1 >> 24 ) ] ^	\				 FT1[ (uint8) (	Y2 >> 16 ) ] ^	\				 FT2[ (uint8) (	Y3 >>  8 ) ] ^	\				 FT3[ (uint8) (	Y0		 ) ];	\												\	X2 = RK[2] ^ FT0[ (uint8) (	Y2 >> 24 ) ] ^	\				 FT1[ (uint8) (	Y3 >> 16 ) ] ^	\				 FT2[ (uint8) (	Y0 >>  8 ) ] ^	\				 FT3[ (uint8) (	Y1		 ) ];	\												\	X3 = RK[3] ^ FT0[ (uint8) (	Y3 >> 24 ) ] ^	\				 FT1[ (uint8) (	Y0 >> 16 ) ] ^	\				 FT2[ (uint8) (	Y1 >>  8 ) ] ^	\				 FT3[ (uint8) (	Y2		 ) ];	\}	AES_FROUND(	Y0,	Y1,	Y2,	Y3,	X0,	X1,	X2,	X3 );		/* round 1 */	AES_FROUND(	X0,	X1,	X2,	X3,	Y0,	Y1,	Y2,	Y3 );		/* round 2 */	AES_FROUND(	Y0,	Y1,	Y2,	Y3,	X0,	X1,	X2,	X3 );		/* round 3 */	AES_FROUND(	X0,	X1,	X2,	X3,	Y0,	Y1,	Y2,	Y3 );		/* round 4 */	AES_FROUND(	Y0,	Y1,	Y2,	Y3,	X0,	X1,	X2,	X3 );		/* round 5 */	AES_FROUND(	X0,	X1,	X2,	X3,	Y0,	Y1,	Y2,	Y3 );		/* round 6 */	AES_FROUND(	Y0,	Y1,	Y2,	Y3,	X0,	X1,	X2,	X3 );		/* round 7 */	AES_FROUND(	X0,	X1,	X2,	X3,	Y0,	Y1,	Y2,	Y3 );		/* round 8 */	AES_FROUND(	Y0,	Y1,	Y2,	Y3,	X0,	X1,	X2,	X3 );		/* round 9 */	if(	ctx->nr	> 10 )	{		AES_FROUND(	X0,	X1,	X2,	X3,	Y0,	Y1,	Y2,	Y3 );	/* round 10	*/		AES_FROUND(	Y0,	Y1,	Y2,	Y3,	X0,	X1,	X2,	X3 );	/* round 11	*/	}	if(	ctx->nr	> 12 )	{		AES_FROUND(	X0,	X1,	X2,	X3,	Y0,	Y1,	Y2,	Y3 );	/* round 12	*/		AES_FROUND(	Y0,	Y1,	Y2,	Y3,	X0,	X1,	X2,	X3 );	/* round 13	*/	}	/* last	round */	RK += 4;	X0 = RK[0] ^ ( FSb[	(uint8)	( Y0 >>	24 ) ] << 24 ) ^				 ( FSb[	(uint8)	( Y1 >>	16 ) ] << 16 ) ^				 ( FSb[	(uint8)	( Y2 >>	 8 ) ] <<  8 ) ^				 ( FSb[	(uint8)	( Y3	   ) ]		 );	X1 = RK[1] ^ ( FSb[	(uint8)	( Y1 >>	24 ) ] << 24 ) ^				 ( FSb[	(uint8)	( Y2 >>	16 ) ] << 16 ) ^				 ( FSb[	(uint8)	( Y3 >>	 8 ) ] <<  8 ) ^				 ( FSb[	(uint8)	( Y0	   ) ]		 );	X2 = RK[2] ^ ( FSb[	(uint8)	( Y2 >>	24 ) ] << 24 ) ^				 ( FSb[	(uint8)	( Y3 >>	16 ) ] << 16 ) ^				 ( FSb[	(uint8)	( Y0 >>	 8 ) ] <<  8 ) ^				 ( FSb[	(uint8)	( Y1	   ) ]		 );	X3 = RK[3] ^ ( FSb[	(uint8)	( Y3 >>	24 ) ] << 24 ) ^				 ( FSb[	(uint8)	( Y0 >>	16 ) ] << 16 ) ^				 ( FSb[	(uint8)	( Y1 >>	 8 ) ] <<  8 ) ^				 ( FSb[	(uint8)	( Y2	   ) ]		 );	PUT_UINT32(	X0,	output,	 0 );	PUT_UINT32(	X1,	output,	 4 );	PUT_UINT32(	X2,	output,	 8 );	PUT_UINT32(	X3,	output,	12 );}/* AES 128-bit block decryption	routine	*/void aes_decrypt( aes_context *ctx,	uint8 input[16], uint8 output[16] ){	uint32 *RK,	X0,	X1,	X2,	X3,	Y0,	Y1,	Y2,	Y3;	RK = ctx->drk;	GET_UINT32(	X0,	input,	0 ); X0	^= RK[0];	GET_UINT32(	X1,	input,	4 ); X1	^= RK[1];	GET_UINT32(	X2,	input,	8 ); X2	^= RK[2];	GET_UINT32(	X3,	input, 12 ); X3	^= RK[3];#define	AES_RROUND(X0,X1,X2,X3,Y0,Y1,Y2,Y3)		\{												\	RK += 4;									\												\	X0 = RK[0] ^ RT0[ (uint8) (	Y0 >> 24 ) ] ^	\				 RT1[ (uint8) (	Y3 >> 16 ) ] ^	\				 RT2[ (uint8) (	Y2 >>  8 ) ] ^	\				 RT3[ (uint8) (	Y1		 ) ];	\												\	X1 = RK[1] ^ RT0[ (uint8) (	Y1 >> 24 ) ] ^	\				 RT1[ (uint8) (	Y0 >> 16 ) ] ^	\				 RT2[ (uint8) (	Y3 >>  8 ) ] ^	\				 RT3[ (uint8) (	Y2		 ) ];	\												\	X2 = RK[2] ^ RT0[ (uint8) (	Y2 >> 24 ) ] ^	\				 RT1[ (uint8) (	Y1 >> 16 ) ] ^	\				 RT2[ (uint8) (	Y0 >>  8 ) ] ^	\				 RT3[ (uint8) (	Y3		 ) ];	\												\	X3 = RK[3] ^ RT0[ (uint8) (	Y3 >> 24 ) ] ^	\				 RT1[ (uint8) (	Y2 >> 16 ) ] ^	\				 RT2[ (uint8) (	Y1 >>  8 ) ] ^	\				 RT3[ (uint8) (	Y0		 ) ];	\}	AES_RROUND(	Y0,	Y1,	Y2,	Y3,	X0,	X1,	X2,	X3 );		/* round 1 */	AES_RROUND(	X0,	X1,	X2,	X3,	Y0,	Y1,	Y2,	Y3 );		/* round 2 */	AES_RROUND(	Y0,	Y1,	Y2,	Y3,	X0,	X1,	X2,	X3 );		/* round 3 */	AES_RROUND(	X0,	X1,	X2,	X3,	Y0,	Y1,	Y2,	Y3 );		/* round 4 */	AES_RROUND(	Y0,	Y1,	Y2,	Y3,	X0,	X1,	X2,	X3 );		/* round 5 */	AES_RROUND(	X0,	X1,	X2,	X3,	Y0,	Y1,	Y2,	Y3 );		/* round 6 */	AES_RROUND(	Y0,	Y1,	Y2,	Y3,	X0,	X1,	X2,	X3 );		/* round 7 */	AES_RROUND(	X0,	X1,	X2,	X3,	Y0,	Y1,	Y2,	Y3 );		/* round 8 */	AES_RROUND(	Y0,	Y1,	Y2,	Y3,	X0,	X1,	X2,	X3 );		/* round 9 */	if(	ctx->nr	> 10 )	{		AES_RROUND(	X0,	X1,	X2,	X3,	Y0,	Y1,	Y2,	Y3 );	/* round 10	*/		AES_RROUND(	Y0,	Y1,	Y2,	Y3,	X0,	X1,	X2,	X3 );	/* round 11	*/	}	if(	ctx->nr	> 12 )	{		AES_RROUND(	X0,	X1,	X2,	X3,	Y0,	Y1,	Y2,	Y3 );	/* round 12	*/		AES_RROUND(	Y0,	Y1,	Y2,	Y3,	X0,	X1,	X2,	X3 );	/* round 13	*/	}	/* last	round */	RK += 4;	X0 = RK[0] ^ ( RSb[	(uint8)	( Y0 >>	24 ) ] << 24 ) ^				 ( RSb[	(uint8)	( Y3 >>	16 ) ] << 16 ) ^				 ( RSb[	(uint8)	( Y2 >>	 8 ) ] <<  8 ) ^				 ( RSb[	(uint8)	( Y1	   ) ]		 );	X1 = RK[1] ^ ( RSb[	(uint8)	( Y1 >>	24 ) ] << 24 ) ^				 ( RSb[	(uint8)	( Y0 >>	16 ) ] << 16 ) ^				 ( RSb[	(uint8)	( Y3 >>	 8 ) ] <<  8 ) ^				 ( RSb[	(uint8)	( Y2	   ) ]		 );	X2 = RK[2] ^ ( RSb[	(uint8)	( Y2 >>	24 ) ] << 24 ) ^				 ( RSb[	(uint8)	( Y1 >>	16 ) ] << 16 ) ^				 ( RSb[	(uint8)	( Y0 >>	 8 ) ] <<  8 ) ^				 ( RSb[	(uint8)	( Y3	   ) ]		 );	X3 = RK[3] ^ ( RSb[	(uint8)	( Y3 >>	24 ) ] << 24 ) ^				 ( RSb[	(uint8)	( Y2 >>	16 ) ] << 16 ) ^				 ( RSb[	(uint8)	( Y1 >>	 8 ) ] <<  8 ) ^				 ( RSb[	(uint8)	( Y0	   ) ]		 );	PUT_UINT32(	X0,	output,	 0 );	PUT_UINT32(	X1,	output,	 4 );	PUT_UINT32(	X2,	output,	 8 );	PUT_UINT32(	X3,	output,	12 );}/** F(P, S, c, i) = U1 xor U2 xor ... Uc * U1 = PRF(P, S || Int(i)) * U2 = PRF(P, U1) * Uc = PRF(P, Uc-1) */ void F(char *password, unsigned char *ssid, int ssidlength, int iterations, int count, unsigned char *output) {     unsigned char digest[36], digest1[SHA_DIGEST_LEN];     int i, j;     /* U1 = PRF(P, S || int(i)) */     memcpy(digest, ssid, ssidlength);     digest[ssidlength] = (unsigned char)((count>>24) & 0xff);     digest[ssidlength+1] = (unsigned char)((count>>16) & 0xff);     digest[ssidlength+2] = (unsigned char)((count>>8) & 0xff);     digest[ssidlength+3] = (unsigned char)(count & 0xff);     HMAC_SHA1(digest, ssidlength+4, (unsigned char*) password, (int) strlen(password), digest1); // for WPA update    /* output = U1 */     memcpy(output, digest1, SHA_DIGEST_LEN);     for (i = 1; i < iterations; i++)     {         /* Un = PRF(P, Un-1) */         HMAC_SHA1(digest1, SHA_DIGEST_LEN, (unsigned char*) password, (int) strlen(password), digest); // for WPA update        memcpy(digest1, digest, SHA_DIGEST_LEN);         /* output = output xor Un */         for (j = 0; j < SHA_DIGEST_LEN; j++)         {             output[j] ^= digest[j];         }     } }/* * password - ascii string up to 63 characters in length * ssid - octet string up to 32 octets * ssidlength - length of ssid in octets * output must be 40 octets in length and outputs 256 bits of key */ int PasswordHash(char *password, unsigned char *ssid, int ssidlength, unsigned char *output) {     if ((strlen(password) > 63) || (ssidlength > 32))         return 0;     F(password, ssid, ssidlength, 4096, 1, output);     F(password, ssid, ssidlength, 4096, 2, &output[SHA_DIGEST_LEN]);     return 1; }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -