?? eps1000nd_md5_tea.c
字號:
/*********************************************************************************************************
;** 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 + -