• nginx中使用 md5


    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;
    }
    
  • 相关阅读:
    Java 面向对象(七)多态
    Java 面向对象(六)接口
    Java 面向对象(五)抽象
    JavaScript 之 String 对象
    JavaScript 之 基本包装类型
    JavaScript 之 Array 对象
    【LeetCode-数组】三数之和
    【LeetCode-数组】加一
    【LeetCode-数组】搜索插入位置
    【LeetCode-数组】删除排序数组中的重复项
  • 原文地址:https://www.cnblogs.com/shenlinken/p/10546567.html
Copyright © 2020-2023  润新知