59 lines
1.6 KiB
C
59 lines
1.6 KiB
C
/**
|
||
* @file myMd5.h
|
||
* @brief MD5 消息摘要算法接口(RFC 1321)
|
||
* @details 计算 128 位哈希值,支持流式输入。
|
||
* 提供单次调用便捷函数 md5_string()。
|
||
*/
|
||
|
||
#ifndef _MY_MD5_H_
|
||
#define _MY_MD5_H_
|
||
#include <stdint.h>
|
||
|
||
#ifdef __cplusplus
|
||
extern "C"
|
||
{
|
||
#endif
|
||
|
||
/**
|
||
* @brief MD5 计算上下文(状态 + 计数 + 待处理缓冲区)
|
||
*/
|
||
typedef struct
|
||
{
|
||
uint32_t state[4]; /* A, B, C, D 四个 32 位状态寄存器 */
|
||
uint32_t count[2]; /* 位计数(低 32 位, 高 32 位) */
|
||
unsigned char buf[64]; /* 待处理数据缓冲区(64 字节) */
|
||
} stru_md5_ctx;
|
||
|
||
/**
|
||
* @brief 初始化 MD5 上下文
|
||
* @param ctx 上下文指针(设置魔数 A=0x67452301 B=0xefcdab89 C=0x98badcfe D=0x10325476)
|
||
*/
|
||
void md5_start(stru_md5_ctx *ctx);
|
||
|
||
/**
|
||
* @brief 输入待计算数据(可多次调用,支持流式处理)
|
||
* @param ctx 上下文指针
|
||
* @param data 数据缓冲区
|
||
* @param len 数据长度(字节)
|
||
*/
|
||
void md5_update(stru_md5_ctx *ctx, const unsigned char *data, int len);
|
||
|
||
/**
|
||
* @brief 完成计算,输出 16 字节 MD5 摘要
|
||
* @param ctx 上下文指针
|
||
* @param result 输出缓冲区(至少 16 字节)
|
||
*/
|
||
void md5_final(stru_md5_ctx *ctx, unsigned char result[16]);
|
||
|
||
/**
|
||
* @brief 单次调用便捷函数:计算字符串的 MD5,返回大写十六进制字符串
|
||
* @param input 输入字符串(以 '\0' 结尾)
|
||
* @param output 输出缓冲区(至少 33 字节,含结尾 '\0')
|
||
*/
|
||
void md5_string(const char *input, char output[33]);
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
#endif
|