nginx中使用 md5
摘要:
core/ngx_md5.h 標頭檔案
/*
* Copyright (C) Igor Sysoev
* Copyright (C) Nginx, Inc.
*/
#ifndef _NGX_MD5_H_INCLUDED_
#define _NGX_MD5_H_INCLUDED_
...
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_CTXngx_md5_t; #if (NGX_OPENSSL_MD5) #define ngx_md5_initMD5_Init #define ngx_md5_updateMD5_Update #define ngx_md5_finalMD5_Final #else #define ngx_md5_initMD5Init #define ngx_md5_updateMD5Update #define ngx_md5_finalMD5Final #endif #else /* !NGX_HAVE_MD5 */ typedef struct { uint64_tbytes; uint32_ta, b, c, d; u_charbuffer[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_tmd5; inti; charmd5_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; }