本节我们主要讲述一下Linux中自带的crypt()函数,nginx采用该函数来实现自己的加密函数。
1. crypt()函数介绍
crypt()函数是一个密码加密函数。它是基于DES加密算法的一种变体来实现加密的。加密后返回一个具有13个可打印字符的字符串。
参数key
为用户输入的明文密码(最多只会处理前8个字节。如果超出部分被忽略)
参数salt
是一个两个字节的字串(字符取自[a-zA-Z0-9./],长度超过2的部分被忽略),用于扰乱该加密算法。
crypt_r()
函数是crypt()函数的可重入版本,参数crypt_data只是用于存储加密后的数据,其内部并不会分配空间。在调用前,需要将crypt_data->initialized置为0.
返回值: 函数成功时返回加密后的字符串;否则返回NULL,并设置相应的错误码
注意: 一般启用_GNU_SOURCE后,就自动的启用了_XOPEN_SOURCE,因此我们可以看到,在程序中我们并没有再去显示的开启_XOPEN_SOURCE
这个宏定义。
参看如下示例test2.c:
编译运行:
# gcc -o test2 test2.c -lcrypt
# ./test2 aa world66677
world66677 encrypted:aaElDg5KDwBQg
# ./test2 aa world66688
world66688 encrypted:aaElDg5KDwBQg
# ./test2 aabb world66688
world66688 encrypted:aaElDg5KDwBQg
# ./test2 "\$6\$y9cP0qlmDYgBk6OZ\$" world6666 //这里也支持其他算法,请参看相应文档(这里反斜杠为转义作用)
world6666 encrypted:$6$y9cP0qlmDYgBk6OZ$9Jnxb/9sqKnr4hofUO1y0T4ireWiQPuj37QYjEahjn1oRIAkWUNcuTBnipQNF6.O5U1YPMmS.1FqA7JphoEnY0
2. os/unix/ngx_user.h头文件
这里只是声明ngx_libc_crypt()函数。
3. os/unix/ngx_user.c源文件
在ngx_auto_config.h头文件中我们有如下定义:
#ifndef NGX_CRYPT
#define NGX_CRYPT 1
#endif
#ifndef NGX_HAVE_GNU_CRYPT_R
#define NGX_HAVE_GNU_CRYPT_R 1
#endif
-
linux crypt函数
-
关于Linux下的crypt加密