c++使用MD5加密 支持中文

本文档提供了一个C++实现的MD5加密库,包括MD5Handler类的详细定义和实现,支持中文字符串的加密。该库包含了初始化、更新、最终化等MD5加密过程的函数,以及不同长度输出的加密方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



------------------------------------------------------------------------------------------

#ifndef MD5Handler_H  

#define MD5Handler_H  
#include <string>


typedef struct
{
    unsigned int count[2];
    unsigned int state[4];
    unsigned char buffer[64];
}MD5Handler_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 TYPE_16     1
#define TYPE_32     2


#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; \
}


class MD5Handler {
public:
    MD5Handler() {
        ctx = new MD5Handler_CTX();
    };
    ~MD5Handler() {
        delete ctx;
    };
    void MD5HandlerInit(MD5Handler_CTX *context);
    void MD5HandlerUpdate(MD5Handler_CTX *context, unsigned char *input, unsigned int inputlen);
    void MD5HandlerFinal(MD5Handler_CTX *context, unsigned char digest[16]);
    void MD5HandlerTransform(unsigned int state[4], unsigned char block[64]);
    void MD5HandlerEncode(unsigned char *output, unsigned int *input, unsigned int len);
    void MD5HandlerDecode(unsigned int *output, unsigned char *input, unsigned int len);


    std::string MD5HandlerEncrypt(std::string input);
    std::string MD5HandlerEncrypt(std::string input, int type);
std::string MD5(std::string strmab);


    MD5Handler_CTX *ctx;
};

#endif




--------------------------------------------------------------------------------



#include <string.h>
#include "MD5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值