资源简介
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
评论
共有 条评论