C语言实现MD5加密,竟如此简单

一、摘要算法摘要算法又称哈希算法 。
【C语言实现MD5加密,竟如此简单】它表示输入任意长度的数据,输出固定长度的数据,它的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密 。
目前可以被解密逆向的只有CRC32算法,只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文 。
消息摘要算法不存在密钥的管理与分发问题,适合于分布式网络上使用 。由于其加密计算的工作量相当巨大,所以以前的这种算法通常只用于数据量有限的情况下的加密 。
消息摘要算法分为三类:

  • MD(Message Digest):消息摘要
  • SHA(Secure Hash Algorithm):安全散列
  • mac(Message Authentication Code):消息认证码
这三类算法的主要作用:验证数据的完整性
二、MD5简介MD5即Message-Digest Algorithm 5(信息-摘要算法) 。
属于摘要算法,是一个不可逆过程,就是无论多大数据,经过算法运算后都是生成固定长度的数据,结果使用16进制进行显示的128bit的二进制串 。通常表示为32个十六进制数连成的字符串 。
MD5有什么用?
用于确保信息传输完整一致 。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现 。更多用在文档校验上,用来生成密钥检测文档是否被篡改 。
三、在线MD5加密有很多在线进行MD5加密的网站,如下:
http://www.metools.info/code/c26.html
举例: 给字符串 12334567 加密成 。
C语言实现MD5加密,竟如此简单

文章插图
 
如图结果为:
32135A337F8DC8E2BB9A9B80D86BDFD0四、C语言实现MD5算法源文件如下:md5.h
#ifndef MD5_H#define MD5_H typedef struct{    unsigned int count[2];    unsigned int state[4];    unsigned char buffer[64];   }MD5_CTX;                          #define F(x,y,z) ((x & y) | (~x & z))#define G(x,y,z) ((x & z) | (y & ~z))#define H(x,y,z) (x^y^z)#define I(x,y,z) (y ^ (x | ~z))#define ROTATE_LEFT(x,n) ((x << n) | (x >> (32-n)))#define FF(a,b,c,d,x,s,ac)           {           a += F(b,c,d) + x + ac;           a = ROTATE_LEFT(a,s);           a += b;           }#define GG(a,b,c,d,x,s,ac)           {           a += G(b,c,d) + x + ac;           a = ROTATE_LEFT(a,s);           a += b;           }#define HH(a,b,c,d,x,s,ac)           {           a += H(b,c,d) + x + ac;           a = ROTATE_LEFT(a,s);           a += b;           }#define II(a,b,c,d,x,s,ac)           {           a += I(b,c,d) + x + ac;           a = ROTATE_LEFT(a,s);           a += b;           }                                            void MD5Init(MD5_CTX *context);void MD5Update(MD5_CTX *context,unsigned char *input,unsigned int inputlen);void MD5Final(MD5_CTX *context,unsigned char digest[16]);void MD5Transform(unsigned int state[4],unsigned char block[64]);void MD5Encode(unsigned char *output,unsigned int *input,unsigned int len);void MD5Decode(unsigned int *output,unsigned char *input,unsigned int len); #endif


推荐阅读