• 大小: 21KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-05-24
  • 语言: 其他
  • 标签: MD5算法C51  

资源简介

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


评论

共有 条评论

相关资源