MD5算法 C语言实现
实现了计算字符串和文件的MD5
算法来自百度百科
VS2013下成功编译运行,速度一般吧。。。
代码如下:
#include <stdio.h>
#include <stdlib.h>
#define MD5_ROTL(a,b) (MD5_tmp=(a),((MD5_tmp>>(32-b))&(0x7fffffff>>(31-b)))|(MD5_tmp<<b)) //循环左移
#define MD5_F(X,Y,Z) ((X&Y)|((~X)&Z))
#define MD5_G(X,Y,Z) ((X&Z)|(Y&(~Z)))
#define MD5_H(X,Y,Z) (X^Y^Z)
#define MD5_I(X,Y,Z) (Y^(X|(~Z)))
#define MD5_FF(a,b,c,d,Mj,s,ti) a=b+MD5_ROTL((a+MD5_F(b,c,d)+Mj+ti),s)
#define MD5_GG(a,b,c,d,Mj,s,ti) a=b+MD5_ROTL((a+MD5_G(b,c,d)+Mj+ti),s)
#define MD5_HH(a,b,c,d,Mj,s,ti) a=b+MD5_ROTL((a+MD5_H(b,c,d)+Mj+ti),s)
#define MD5_II(a,b,c,d,Mj,s,ti) a=b+MD5_ROTL((a+MD5_I(b,c,d)+Mj+ti),s)
#define MD5main \
{MD5_FF(a, b, c, d, M[0], 7, 0xd76aa478);\
MD5_FF(d, a, b, c, M[1], 12, 0xe8c7b756);\
MD5_FF(c, d, a, b, M[2], 17, 0x242070db);\
MD5_FF(b, c, d, a, M[3], 22, 0xc1bdceee);\
MD5_FF(a, b, c, d, M[4], 7, 0xf57c0faf);\
MD5_FF(d, a, b, c, M[5], 12, 0x4787c62a);\
MD5_FF(c, d, a, b, M[6], 17, 0xa8304613);\
MD5_FF(b, c, d, a, M[7], 22, 0xfd469501);\
MD5_FF(a, b, c, d, M[8], 7, 0x698098d8);\
MD5_FF(d, a, b, c, M[9], 12, 0x8b44f7af);\
MD5_FF(c, d, a, b, M[10], 17, 0xffff5bb1);\
MD5_FF(b, c, d, a, M[11], 22, 0x895cd7be);\
MD5_FF(a, b, c, d, M[12], 7, 0x6b901122);\
MD5_FF(d, a, b, c, M[13], 12, 0xfd987193);\
MD5_FF(c, d, a, b, M[14],