传送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;
}
}