zoukankan      html  css  js  c++  java
  • 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中父类强制转换成子类的原则
    基于 JWT + Refresh Token 的用户认证实践
    [java]idea设置及debug使用
    [java]Class类和Object类的关系
    [java]文件操作
    [java]javabean
    [java]string类型
    [java]求数据的hmac sha1的并用base64编码
    java 多线程——一个定时调度的例子
    设计模式 4 —— 迭代器和组合模式(组合)
  • 原文地址:https://www.cnblogs.com/shenlinken/p/10546567.html
Copyright © 2011-2022 走看看