# libmd5 — MD5 消息摘要 API 参考 ## 模块概述 libmd5 实现了 RFC 1321 定义的 MD5 消息摘要算法。128 位输出,支持流式输入 (分多次调用 `md5_update`)。提供 `md5_string` 便捷函数一步完成字符串 MD5 计算。 ## 数据结构 ```c 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; ``` ## 接口函数 ### md5_start(ctx) ```c void md5_start(stru_md5_ctx *ctx); ``` 初始化上下文,设置 RFC 1321 标准魔数: `A=0x67452301 B=0xefcdab89 C=0x98badcfe D=0x10325476`。 ### md5_update(ctx, data, len) ```c void md5_update(stru_md5_ctx *ctx, const unsigned char *data, int len); ``` 输入数据,可多次调用支持流式处理。内部按 64 字节分块,填满即变换。 ### md5_final(ctx, result) ```c void md5_final(stru_md5_ctx *ctx, unsigned char result[16]); ``` 完成计算,输出 16 字节 MD5 摘要。内部自动填充 0x80+零+位计数。 ### md5_string(input, output) ```c void md5_string(const char *input, char output[33]); ``` 单次调用便捷函数:输入字符串 → 输出 32 字符大写十六进制 + '\0'。 ## 使用示例 ```c #include "myMd5.h" #include #include int main(void) { // 方式 1: 单次调用 char hex[33]; md5_string("hello", hex); printf("MD5(hello) = %s\n", hex); // 输出: MD5(hello) = 5D41402ABC4B2A76B9719D911017C592 // 方式 2: 流式计算(大文件场景) stru_md5_ctx ctx; unsigned char digest[16]; md5_start(&ctx); md5_update(&ctx, (unsigned char *)"hello ", 6); md5_update(&ctx, (unsigned char *)"world", 5); md5_final(&ctx, digest); printf("流式: "); for (int i = 0; i < 16; i++) printf("%02X", digest[i]); printf("\n"); return 0; } ``` ## 依赖关系 - **依赖**: 无 - **被依赖**: 文件校验、协议认证 等模块