码迷,mamicode.com
首页 > 其他好文 > 详细

nginx中使用 md5

时间:2019-03-17 13:56:35      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:fine   sprintf   sizeof   static   final   class   数据   int   char   

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;
}

nginx中使用 md5

标签:fine   sprintf   sizeof   static   final   class   数据   int   char   

原文地址:https://www.cnblogs.com/shenlinken/p/10546567.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!