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