本章我们主要讲述一下nginx中加密的处理。
1. core/ngx_crypt.h源文件
本头文件主要是ngx_crypt()函数的声明。
2. core/ngx_crypt.c源文件
本文件主要是实现ngx_crypt()功能:
2.1 相关函数声明
在objs/ngx_auto_config.h头文件中,我们有如下定义:
#ifndef NGX_HAVE_SHA1
#define NGX_HAVE_SHA1 1
#endif
#ifndef NGX_CRYPT
#define NGX_CRYPT 1
#endif
关于各个函数的大体作用,我们后面会进行说明。
2.2 函数ngx_crypt()
ngx_crypt()函数主要是根据salt
值选择合适的加密算法对key
进行加密,加密后的结果存放在encrypted
参数中,并通过函数返回值返回加密后子串的长度。
-
当salt以$apr1$
开头时: 采用ngx_crypt_apr1()进行加密
-
当salt以{PLAIN}
开头时: 采用ngx_crypt_plain()进行加密
-
当salt以{SSHA}
开头时: 采用ngx_crypt_ssha()进行加密
-
当salt以{SHA}
开头时: 采用ngx_crypt_sha()进行加密
-
默认情况下,采用ngx_libc_crypt()进行加密
2.3 函数ngx_crypt_apr1()
这是Apache服务器能够识别的一种专用的加密算法,称作Apache apr1加密.
2.4 函数ngx_crypt_to64()
本函数主要用于将uint32_t
类型的整数转换成长度为n
的64进制字串。
2.5 函数ngx_crypt_plain()
函数ngx_crypt_plain()主要是再key
前面加上{PLAIN}
头。
2.6 函数ngx_crypt_ssha()
当前我们支持NGX_HAVE_SHA1
宏定义。ssha加密算法的基本步骤是:base64(SHA1(key salt) salt)
。
2.7 函数
当前我们支持NGX_HAVE_SHA1
宏定义。nginx中SHA
加密算法的基本步骤是:base64(SHA1(key))
。