資源簡介
MD5_加密算法程序_C51驗證可以用
在串口助手中驗證了.

代碼片段和文件信息
#include?
void?Encryption(void);
void?DatConvert(void);
void?Send_Dat(unsigned?char?*datunsigned?char?num);
unsigned?long?shift(unsigned?long?aunsigned?char?s);
bit?Flag;
unsigned?char?ReceiveCountTimeCount;
unsigned?char?ReceiveDat[64];
unsigned?long?xdata?M[16];
unsigned?long?abcd;
unsigned?long?xdata?atemp=0x67452301btemp=0xefcdab89ctemp=0x98badcfedtemp=0x10325476;
unsigned?long?code?TiTable[]=
{ 0xd76aa4780xe8c7b7560x242070db0xc1bdceee
0xf57c0faf0x4787c62a0xa83046130xfd4695010x698098d8
0x8b44f7af0xffff5bb10x895cd7be0x6b9011220xfd987193
0xa679438e0x49b408210xf61e25620xc040b3400x265e5a51
0xe9b6c7aa0xd62f105d0x024414530xd8a1e6810xe7d3fbc8
0x21e1cde60xc33707d60xf4d50d870x455a14ed0xa9e3e905
0xfcefa3f80x676f02d90x8d2a4c8a0xfffa39420x8771f681
0x6d9d61220xfde5380c0xa4beea440x4bdecfa90xf6bb4b60
0xbebfbc700x289b7ec60xeaa127fa0xd4ef30850x04881d05
0xd9d4d0390xe6db99e50x1fa27cf80xc4ac56650xf4292244
0x432aff970xab9423a70xfc93a0390x655b59c30x8f0ccc92
0xffeff47d0x85845dd10x6fa87e4f0xfe2ce6e00xa3014314
0x4e0811a10xf7537e820xbd3af2350x2ad7d2bb0xeb86d391
};
unsigned?char?code?STable[]=
{ 7121722712172271217227121722
591420591420591420591420411
1623411162341116234111623610
1521610152161015216101521
};
void?Uart_init(void)
{
SCON?|=0x50;?????????//01010000?8?位可變波特率,無奇偶校驗位
? TMOD|=0x20;?????????//00110001?設置定時器1為8位自動重裝計數器
TL1?=?0xFd; //設定定時初值??//9600bps
TH1?=?0xFd; //設定定時初值
TR1=1;????//開定時器1
ES=1;????//允許串口中斷??????
EA?=?1;????????????
}
void?Timer0Init(void)
{
TMOD|=0x01;//設置定時器0為工作方式1
TL0?=?0x66; //設置定時初值
TH0?=?0xFC; //設置定時初值???????????//定時1ms??//11.0592MHZ
ET0=1;?????//打開定時器中斷
EA=1;??????//打開總中斷開關
}
void?main(void)
{?
Uart_init();?
Timer0Init();
while(1)
{
if(Flag)
{
Flag=0;
DatConvert(); ????//數據轉換
Encryption();
Send_Dat(ReceiveDat16);
ReceiveCount=0;
ES=1;? //開中斷????????????????????
? }
}
}
void?DatConvert(void) ?????///數據填充并分組
{
unsigned?char?ib;
unsigned?long?tmp;
for(i=0;i<(64-ReceiveCount);i++)
{
ReceiveDat[ReceiveCount+i]=0;
}
ReceiveDat[ReceiveCount]=0x80; ???????//數據末端加補1?其余位補0,不到448位即56個字節
ReceiveDat[56]=ReceiveCount*8; ???//用8個字節表示原數據的長度,其余補0,一共64個字節;
for(i=0;i<16;i++) ???????????//數據分組并得出M數值,由于是小端字序,所以高字節在高地址,低字節在低地址;如?11?22?33?44?實際值是0x44332211
{
for(b=0;b<4;b++)
{
tmp=tmp<<8;
tmp=tmp|ReceiveDat[i*4+(3-b)];
}
M[i]=tmp;
}
}
void?Encryption(void)
{
unsigned?char?i;
unsigned?long?tempFg;
a=atemp;
b=btemp;
c=ctemp;
d=dtemp;
????for(i=0;i<64;i++)
{
????????if(i<16)
{
????????????F=(b&c)|((~b)&d);
????????????g=i;
????????}
else?if(i<32)
{
????????????F=(d&b)|((~d)&c);
????????????g=(5*i+1)%16;
????????}
else?if(i<48)
{
????????????F=b^c^d;
????????????g=(3*i+5)%
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????9700??2015-04-27?16:52??MD5加密算法程序\main.LST
?????文件???????4597??2015-04-27?16:52??MD5加密算法程序\main.c
?????文件??????54874??2015-04-27?21:17??MD5加密算法程序\agreement_uvopt.bak
?????文件??????????0??2015-04-16?18:28??MD5加密算法程序\agreement_uvproj.bak
?????文件??????12770??2015-04-27?16:52??MD5加密算法程序\main.OBJ
?????文件???????9743??2015-04-27?16:52??MD5加密算法程序\agreement
?????文件???????5227??2015-04-27?16:52??MD5加密算法程序\agreement.hex
?????文件?????????45??2015-04-27?16:52??MD5加密算法程序\agreement.lnp
?????文件??????13964??2015-04-27?16:52??MD5加密算法程序\agreement.M51
?????文件????????187??2015-04-27?22:02??MD5加密算法程序\agreement.plg
?????文件??????54876??2015-04-27?22:02??MD5加密算法程序\agreement.uvopt
?????文件??????13263??2015-04-16?19:17??MD5加密算法程序\agreement.uvproj
?????目錄??????????0??2015-11-07?14:03??MD5加密算法程序
-----------?---------??----------?-----??----
???????????????179246????????????????????13
評論
共有 條評論