//****************************************************************** // // AUTHOR : ShiHaoQiu // // FUNCTION : 将编解码函数封装形成的动态库,可进行AES加解密、获取数据的MD5值。 // // TIME : 2014.05.14 // // HISTORY : // Datetime Action Author Reason // ------------------------------------------------------------------- // 2014.05.14 Creation ShiHaoQiu //****************************************************************** #ifndef DBCIPHER_H #define DBCIPHER_H #ifdef _WINDOWS64 #ifdef DB_CIPHER_EXPORTS #define DB_CIPHER_DLL __declspec(dllexport) #else #define DB_CIPHER_DLL __declspec(dllimport) #endif #else #define DB_CIPHER_DLL #endif #include #include using namespace std; class DB_CIPHER_DLL DBCipher { public: DBCipher(unsigned char* key); //key为128位的秘钥,构造时指定 virtual ~DBCipher(); //AES 加解密(加密结果通过BASE64编码) //最大支持对明文char[15]的加密 unsigned char* AESCipher(unsigned char* input); //加密 unsigned char* AESInvCipher(unsigned char* input); //解密 void* AESCipher(void* input, int length=0); void* AESInvCipher(void* input, int length); //MD5 string GetMD5Value(const unsigned char* input,size_t length); //获取MD5值 //BASE64 编解码函数 /*编码 DataByte [in]输入的数据长度,以字节为单位 */ string Base64Encode(const unsigned char* Data,int DataByte); /*解码 DataByte [in]输入的数据长度,以字节为单位 OutByte [out]输出的数据长度,以字节为单位,请不要通过返回值计算 输出数据的长度 */ string Base64Decode(const char* Data,int DataByte,int& OutByte); private: //AES加解密相关成员 begin unsigned char Sbox[256]; unsigned char InvSbox[256]; unsigned char w[11][4][4]; void KeyExpansion(unsigned char* key, unsigned char w[][4][4]); unsigned char FFmul(unsigned char a, unsigned char b); void SubBytes(unsigned char state[][4]); void ShiftRows(unsigned char state[][4]); void MixColumns(unsigned char state[][4]); void AddRoundKey(unsigned char state[][4], unsigned char k[][4]); void InvSubBytes(unsigned char state[][4]); void InvShiftRows(unsigned char state[][4]); void InvMixColumns(unsigned char state[][4]); //AES加解密相关成员 end //MD5计算相关成员 begin unsigned long _state[4]; /* state (ABCD) */ unsigned long _count[2]; /* number of bits, modulo 2^64 (low-order word first) */ unsigned char _buffer[64]; /* input buffer */ unsigned char _digest[16]; /* message digest */ bool _finished; /* calculate finished ? */ void transform(const unsigned char block[64]); void final(); const unsigned char* digest(); void encode(const unsigned long *input, unsigned char *output, size_t length); void decode(const unsigned char *input, unsigned long *output, size_t length); string bytesToHexString(const unsigned char *input, size_t length); void update(const unsigned char *input, size_t length); //MD5计算相关成员 end }; #endif // DBCIPHER_H