如有转载,请注明出处:http://blog.youkuaiyun.com/embedded_sky
作者:super_bert@csdn
C语言生成MD5校验码源码,从Linux命令源码md5sum移植,MS Windows VS2010环境可用。
头文件md5.h
#ifndef MD5_H
#define MD5_H
#ifdef __alpha
typedef unsigned int uint32;
#else
typedef unsigned long uint32;
#endif
#define FOPRTXT "r"
struct MD5Context {
uint32 buf[4];
uint32 bits[2];
unsigned char in[64];
};
void MD5Init(struct MD5Context *context);
void MD5Update(struct MD5Context *context, unsigned char const *buf, unsigned len);
void MD5Final(unsigned char digest[16], struct MD5Context *context);
void MD5Transform(uint32 buf[4], uint32 const in[16]);
/*
* This is needed to make RSAREF happy on some MS-DOS compilers.
*/
typedef struct MD5Context MD5_CTX;
/*add by super bert 2014-09-29*/
//生成文件MD5
int mdfile(FILE *fp, unsigned char *digest);
int md5sum(const char *file, char *digest );
void print_digest(unsigned char *p, char *md5code);
#endif /* !MD5_H */
源文件md5.cpp
/*
* This code implements the MD5 message-digest algorithm.
* The algorithm is due to Ron Rivest. This code was
* written by Colin Plumb in 1993, no copyright is claimed.
* This code is in the public domain; do with it what you wish.
*
* Equivalent code is available from RSA Data Security, Inc.
* This code has been tested against that, and is equivalent,
* except that you don't need to include two pages of legalese
* with every copy.
*
* To compute the message digest of a chunk of bytes, declare an
* MD5Context structure, pass it to MD5Init, call MD5Update as
* needed on buffers full of bytes, and then call MD5Final, which
* will fill a supplied 16-byte array with the digest.
*/
#include "stdafx.h"
#include <string.h> /* for memcpy() */
#include "md5.h"
void byteReverse(unsigned char *buf, unsigned longs);
enum { UNKNOWN, MSB1st, LSB1st } byteOrder = UNKNOWN;
void setByteOrder(void) {
union {
unsigned short int usi;
unsi