Linux的加密口令, 我们发现所谓的加密


对于示例的密码域$1$Bg1H/4mz$X89TqH7tpi9dX1B9j5YsF.,我们参考了Linux标准源文件passwd.c,在其中的pw_encrypt函数中找到了加密方法。

我们发现所谓的加密算法,其实就是用明文密码和一个叫salt的东西通过函数crypt()完成加密。

而所谓的密码域密文也是由三部分组成的,即:$id$salt$encrypted。

【注】: id为1时,采用md5进行加密;

id为5时,采用SHA256进行加密;

id为6时,采用SHA512进行加密。

3) 数据加密函数crypt()讲解

i. 头文件:#define _XOPEN_SOURCE

#include <unistd.h>

ii. 函数原型:char *crypt(const char *key, const char *salt);

iii. 函数说明:crypt()将使用DES演算法将参数key所指的字符串加以编码,key字符串长度仅取前8个字符,超过此长度的字符没有意义。参数salt为两个字符组成的字符串,由a-z、A-Z、0-9,’.’和’/’所组成,用来决定使用4096种不同内建表格的哪一种。函数执行成功后会返回指向编码过的字符串指针,参数key所指向的字符串不会有所改动。编码过的字符串长度为13个字符,前两个字符为参数salt代表的字符串。

iv. 返回值:返回一个指向以NULL结尾的密码字符串

v. 附加说明:使用gcc编译时需要加上 –lcrypt

相关内容