nginx中使用 md5

时间:2025-01-17 22:04:56

core/ngx_md5.h 头文件

/*
* Copyright (C) Igor Sysoev
* Copyright (C) Nginx, Inc.
*/ #ifndef _NGX_MD5_H_INCLUDED_
#define _NGX_MD5_H_INCLUDED_ #include <ngx_config.h>
#include <ngx_core.h> #if (NGX_HAVE_MD5) #if (NGX_HAVE_OPENSSL_MD5_H)
#include <openssl/md5.h>
#else
#include <md5.h>
#endif typedef MD5_CTX ngx_md5_t; #if (NGX_OPENSSL_MD5) #define ngx_md5_init MD5_Init
#define ngx_md5_update MD5_Update
#define ngx_md5_final MD5_Final #else #define ngx_md5_init MD5Init
#define ngx_md5_update MD5Update
#define ngx_md5_final MD5Final #endif #else /* !NGX_HAVE_MD5 */ typedef struct {
uint64_t bytes;
uint32_t a, b, c, d;
u_char buffer[64];
} ngx_md5_t; void ngx_md5_init(ngx_md5_t *ctx);
void ngx_md5_update(ngx_md5_t *ctx, const void *data, size_t size);
void ngx_md5_final(u_char result[16], ngx_md5_t *ctx); #endif #endif /* _NGX_MD5_H_INCLUDED_ */

调用步骤

ngx_md5_init(ngx_md5_t *ctx);

//对长度为size的data数据更新ctx
ngx_md5_update(ngx_md5_t *ctx, const void *data, size_t size); //产生16字节长的md5值
ngx_md5_final(u_char result[16], ngx_md5_t *ctx);

例子

static int calculate_md5(ngx_str_t *str)
{
ngx_md5_t md5;
int i;
char md5_buf[16], md5_buf2[32], buf[1024]; if (str->len <= 0 || str->len > sizeof(buf)) {
return -1;
} memcpy(buf, str->data, str->len); ngx_md5_init(&md5);
ngx_md5_update(&md5, buf, str->len);
ngx_md5_final(md5_buf, &md5); //这里求得的md5_buf是16字节md5值,可以转成32字节的
for (i = 0; i < 16; i++){
sprintf(md5_buf2 + i*2, "%02X", md5_buf[i]);
} return 0;
}