这个md5干嘛用的,大家比我清楚就不说了,这里不是讲md5的原理。要讲md5的原理,网上一大堆,我也不是什么算法很厉害的人,我只是算法搬运工。咱是一般程序员,有时候能完成业务需要就可以,那些伟大算法的发明留个那些伟大的数学家,在此致敬!!!
又是可恶的150字....................................................................................................................凑字分界线
废话不多上码:
#include "md5.hpp" int main() { MD5 md5("12fdsfsdfsdfds"); cout << md5.toString() << endl; // 16字节md5码的16进制表示字符串,方便人阅读 cout << md5.get() << endl; // 16字节点的md5码,输出基本都是乱码 return 0; }
类的源码两个文件:
//md5.hpp #ifndef __MD5_HPP__ #define __MD5_HPP__ #include <string> #include "md5_helper.hpp" /* MD5 context. */ typedef struct _MD5_CTX{ /* state (ABCD) */ /*四个32bits数,用于存放最终计算得到的消息摘要。当消息长度〉512bits时,也用于存放每个512bits的中间结果*/ uint32 state[4]; /* number of bits, modulo 2^64 (lsb first) */ /*存储原始信息的bits数长度,不包括填充的bits,最长为 2^64 bits,因为2^64是一个64位数的最大值*/ uint32 count[2]; /* input buffer */ /*存放输入的信息的缓冲区,512bits*/ uint8 buffer[64]; } MD5_CTX; class MD5 { public: MD5(); MD5(int8* input); MD5(const MD5& md5); bool operator == (const MD5& md5); MD5& operator = (const MD5& md5); std::string toString(); const uint8* get()const; protected: void encrypt(uint8* input); // 初始化 void _init(); void _update(uint8* input,uint8 inputLen); void _final(); private: MD5_CTX m_ctx; uint8 m_digest[17]; }; MD5::MD5() { R_memset((uint8*)m_digest,0,sizeof(m_digest)); m_digest[16]='