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

📄 eps1000nd_md5_tea.c

📁 MD5算法在keil上实现。 其中设计到一些flash读写函数需要自己补充 上传上去只是给大家参考一下。
💻 C
📖 第 1 页 / 共 2 页
字号:
/*********************************************************************************************************
;**				                               ePass1000ND-8K
;**                                   new hardware and software For Keil c51
;**
;**                                  (c) Copyright 2006-2007, uxOne
;**                                           All Rights Reserved
;**
;**                                                  V1.00.0
;**
;**
;**--------------文件信息--------------------------------------------------------------------------------
;**最后修改日期: 
;**描       述: 
;**
;**--------------历史版本信息----------------------------------------------------------------------------
;**创   建   人: 
;**版        本: 
;**日       期: 
;**描       述: 
;**
;**------------------------------------------------------------------------------------------------------
;**修   改   人: 
;**版        本: 
;**日       期: 
;**描       述: 
;**
;**------------------------------------------------------------------------------------------------------
;**修   改   人: 
;**版       本: 
;**日       期: 
;**描       述: 
;**
;**------------------------------------------------------------------------------------------------------
;**修   改   人: 
;**版       本: 
;**日       期: 
;**描       述: 
;**
;**--------------当前版本修订------------------------------------------------------------------------------
;**修   改   人: 
;**日       期:
;**描       述:
;**
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
#include "includes.h" 



/***********************************************************************************************
;****函数名称:                                                                               
;****入口参数:                                                                                 
;****出口参数:                                                                                 
;****全局变量:                                                                                 
;****调用模块:                                                                                 
;****说    明: MD5运算需要的一些常量                                                                             
;***********************************************************************************************
;****创 建 人:                                                                                 
;****创建日期:                                                                                 
;***********************************************************************************************
;****修 改 人:                                                                                 
;****修改日期:                                                                                 
;***********************************************************************************************/

code uint8 MD5_ST[]={
	0x01,0x23,0x45,0x67,
	0x89,0xab,0xcd,0xef,
	0xfe,0xdc,0xba,0x98,
	0x76,0x54,0x32,0x10
};

code uint8 MD5_XI[][16] = {
	0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,
	4,24,44,0,20,40,60,16,36,56,12,32,52,8,28,48,
	20,32,44,56,4,16,28,40,52,0,12,24,36,48,60,8,
	0,28,56,20,48,12,40,4,32,60,24,52,16,44,8,36
	};
code uint8 MD5_TI[][64]={
	0x78,0xA4,0x6A,0xD7,
	0x56,0xB7,0xC7,0xE8,
    0xDB,0x70,0x20,0x24,
    0xEE,0xCE,0xBD,0xC1,
    0xAF,0x0F,0x7C,0xF5,
    0x2A,0xC6,0x87,0x47,
    0x13,0x46,0x30,0xA8,
    0x01,0x95,0x46,0xFD,
    0xD8,0x98,0x80,0x69,
    0xAF,0xF7,0x44,0x8B,
    0xB1,0x5B,0xFF,0xFF,
    0xBE,0xD7,0x5C,0x89,
    0x22,0x11,0x90,0x6B,
    0x93,0x71,0x98,0xFD,
    0x8E,0x43,0x79,0xA6,
    0x21,0x08,0xB4,0x49,
                        
    0x62,0x25,0x1E,0xF6,
    0x40,0xB3,0x40,0xC0,
    0x51,0x5A,0x5E,0x26,
    0xAA,0xC7,0xB6,0xE9,
    0x5D,0x10,0x2F,0xD6,
    0x53,0x14,0x44,0x02,
    0x81,0xE6,0xA1,0xD8,
    0xC8,0xFB,0xD3,0xE7,
    0xE6,0xCD,0xE1,0x21,
    0xD6,0x07,0x37,0xC3,
    0x87,0x0D,0xD5,0xF4,
    0xED,0x14,0x5A,0x45,
    0x05,0xE9,0xE3,0xA9,
    0xF8,0xA3,0xEF,0xFC,
    0xD9,0x02,0x6F,0x67,
    0x8A,0x4C,0x2A,0x8D,
                        
    0x42,0x39,0xFA,0xFF,
    0x81,0xF6,0x71,0x87,
    0x22,0x61,0x9D,0x6D,
    0x0C,0x38,0xE5,0xFD,
    0x44,0xEA,0xBE,0xA4,
    0xA9,0xCF,0xDE,0x4B,
    0x60,0x4B,0xBB,0xF6,
    0x70,0xBC,0xBF,0xBE,
    0xC6,0x7E,0x9B,0x28,
    0xFA,0x27,0xA1,0xEA,
    0x85,0x30,0xEF,0xD4,
    0x05,0x1D,0x88,0x04,
    0x39,0xD0,0xD4,0xD9,
    0xE5,0x99,0xDB,0xE6,
    0xF8,0x7C,0xA2,0x1F,
    0x65,0x56,0xAC,0xC4,
                        
    0x44,0x22,0x29,0xF4,
    0x97,0xFF,0x2A,0x43,
    0xA7,0x23,0x94,0xAB,
    0x39,0xA0,0x93,0xFC,
    0xC3,0x59,0x5B,0x65,
    0x92,0xCC,0x0C,0x8F,
    0x7D,0xF4,0xEF,0xFF,
    0xD1,0x5D,0x84,0x85,
    0x4F,0x7E,0xA8,0x6F,
    0xE0,0xE6,0x2C,0xFE,
    0x14,0x43,0x01,0xA3,
    0xA1,0x11,0x08,0x4E,
    0x82,0x7E,0x53,0xF7,
    0x35,0xF2,0x3A,0xBD,
    0xBB,0xD2,0xD7,0x2A,
    0x91,0xD3,0x86,0xEB,
};

code uint8 MD5_SI[4][4]={
	7,12,17,22,
	5,9,14,20,
	4,11,16,23,
	6,10,15,21
};

code uint8 TEA_CONST[]={
	0x20,0x37,0xef,0xc6,
	0xb9,0x79,0x37,0x9e,

	0xfb,0xda,0x61,0x34,
	0xef,0x4a,0x73,0xc8
};
//code uint8 TEA_CONST[]={0xB2,0x75,0xFA,0xF3,0x6E,0x95,0x74,0x46,0x4E,0xE0,0x65,0xDF,0xAF,0x9A,0x77,0x6C};
/***********************************************************************************************
;****函数名称:MD5F                                                                               
;****入口参数:                                                                                 
;****出口参数:                                                                                 
;****全局变量:                                                                                 
;****调用模块:                                                                                 
;****说    明: F运算  MD_R = (((x) & (y)) | ((~x) & (z)))                                                                            
;***********************************************************************************************
;****创 建 人:                                                                                 
;****创建日期:                                                                                 
;***********************************************************************************************
;****修 改 人:                                                                                 
;****修改日期:                                                                                 
;***********************************************************************************************/
void MD5F()
{
	uint8 i;
	for(i=3;i != -1;i--)
	{
	 	*(uint8 *)(md5TEMP + i) =
		(	(*(uint8 *)(md5X + i) 		& 	*(uint8 *)(md5Y + i)) 	|
			(~(*(uint8 *)(md5X + i))	& 	*(uint8 *)(md5Z + i))	);
	}		

}

/***********************************************************************************************
;****函数名称:MD5G                                                                               
;****入口参数:                                                                                 
;****出口参数:                                                                                 
;****全局变量:                                                                                 
;****调用模块:                                                                                 
;****说    明: MD_R = (((x) & (z)) | ((y) & (~z)))                                                                             
;***********************************************************************************************
;****创 建 人:                                                                                 
;****创建日期:                                                                                 
;***********************************************************************************************
;****修 改 人:                                                                                 
;****修改日期:                                                                                 
;***********************************************************************************************/
void MD5G()
{
	uint8 i;
	for(i=3;i != -1;i--)
	{
	 	*(uint8 *)(md5TEMP + i) =
		(	(*(uint8 *)(md5X + i)	& 	*(uint8 *)(md5Z + i)) 		|
			(*(uint8 *)(md5Y + i)	& 	~(*(uint8 *)(md5Z + i)))	);	
	}

}
/***********************************************************************************************
;****函数名称:MD5H                                                                               
;****入口参数:                                                                                 
;****出口参数:                                                                                 
;****全局变量:                                                                                 
;****调用模块:                                                                                 
;****说    明:  MD_R = ((x) ^ (y) ^ (z))                                                                          
;***********************************************************************************************
;****创 建 人:                                                                                 
;****创建日期:                                                                                 
;***********************************************************************************************
;****修 改 人:                                                                                 
;****修改日期:                                                                                 
;***********************************************************************************************/
void MD5H()
{
	uint8 i;
	for(i=3;i != -1;i--)
	{
		*(uint8 *)(md5TEMP + i) =
			(*(uint8 *)(md5X + i)	^
			*(uint8 *)(md5Y + i)) 	^
			*(uint8 *)(md5Z + i) 	;	
	}
}

/***********************************************************************************************
;****函数名称:MD5I                                                                               
;****入口参数:                                                                                 
;****出口参数:                                                                                 
;****全局变量:                                                                                 
;****调用模块:                                                                                 
;****说    明:  MD_R = ((y) ^ ((x) | (~z)))                                                                            
;***********************************************************************************************
;****创 建 人:                                                                                 
;****创建日期:                                                                                 
;***********************************************************************************************
;****修 改 人:                                                                                 
;****修改日期:                                                                                 
;***********************************************************************************************/
void MD5I()
{
 	uint8 i;
	for(i=3;i != -1;i--)
	{
		*(uint8 *)(md5TEMP + i) =
			*(uint8 *)(md5Y + i) 	^
			(*(uint8 *)(md5X + i)	| 	~(*(uint8 *)(md5Z + i)));			
	}

}

/***********************************************************************************************
;****函数名称:MD5Transform                                                                               
;****入口参数:                                                                                 
;****出口参数:                                                                                 
;****全局变量:                                                                                 
;****调用模块:                                                                                 
;****说    明: md5Buf填满后 把md5State和md5Buf进行MD5运算
				根据官方算法 16个轮回
				/* Do the following 16 operations.
				[ABCD] 	[DABC] 	[CDAB] 	[BCDA]
				[ABCD] 	[DABC] 	[CDAB] 	[BCDA]
				[ABCD] 	[DABC] 	[CDAB] 	[BCDA]
				[ABCD] 	[DABC] 	[CDAB] 	[BCDA]
				不难发现 只要把16个数据向右循环移位 abcd->dabc ->cdab->....
				16个轮回结束后刚好又回到abcd状态 
分析F,FF,G,GG,H,HH,I.II算法
				#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
				#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
				#define H(x, y, z) ((x) ^ (y) ^ (z))
				#define I(x, y, z) ((y) ^ ((x) | (~z)))
				#define FF(a, b, c, d, x, s, ac) { \

⌨️ 快捷键说明

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