md5验证

传送ASCII文件时,由于是明文,接收方无法知道内容是否被串改过,因此需要进行加密。MD5是其中一种比较好的信息,可以保证信息的一致性。至于MD5的解释或者说意义,大家查看网络资料就可以了。

涉及的函数分别为MD5_Init或者MD5Init,MD5_Update或者MD5Update,MD5_Final或者MD5Final,系统不一样,调用的库函数不一样。具体的代码为

char* MD5File (char *filename)
 
{ 
  
  static char output[33]={""};
  FILE *file;
  MD5_CTX context;
  int len;
  unsigned char* buffer, digest[16];
  int i;
  char output1[32];
  long li_FileLen=0;

  struct stat FileStat; 
  char logMessage[256]={0};

   if(stat(filename, &FileStat) < 0)
    {
		WriteLog(EROR,"Get MD5 File Stat fail");
        return "";
    }

    li_FileLen = FileStat.st_size;
	buffer = (unsigned char*)malloc(li_FileLen+1);
  
  if ((file = fopen (filename, "rb")) == NULL)
  { 
     sprintf(logMessage,"%s can't be openedn", filename);
	 WriteLog(EROR,logMessage);
     return 0;
  }
  else 
   {
  	      #ifdef SUSE_LIUNUX
		  MD5_Init (&context);
		  #else
	      MD5Init (&context);
		  #endif
	      while (len = fread (buffer, 1, li_FileLen, file))
              {    
                   #ifdef SUSE_LIUNUX
                   MD5_Update (&context, buffer, len);
	          #else
		 MD5Update (&context, buffer, len);
		 #endif
	      }

               #ifdef SUSE_LIUNUX
	      MD5_Final (digest, &context);
	      #else
	      MD5Final (digest, &context);
               #endif 
		  
	      fclose (file);
	      for (i = 0; i < 16; i++)
	      {   
	          sprintf(&(output1[2*i]),"%02x",(unsigned char)digest[i]);
	          sprintf(&(output1[2*i+1]),"%02x",(unsigned char)(digest[i]<<4));
	      }
	      for(i=0;i<32;i++)
	      {
                   output[i]=output1[i];
               }
	      free(buffer);
	      return output;
    }

 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值