关于/etc/passwd和/etc/shadow的解释就不多说了。
/etc/shadow 里面保存的密码的形式是
username:$1$X1FNdStG$v8jqD184lDOuPeDoZqOc8.:17281:0:99999:7:::
主要看中间一段
$加密方式&salt&加密后的数据
$1$X1FNdStG$v8jqD184lDOuPeDoZqOc8.
因此这里
加密方式是1
salt是X1FNdStG
加密后的密码是
v8jqD184lDOuPeDoZqOc8.
具体可以使用man crypt来查案 加密方式1是md5加密 但是不是标准的md5?)
调用代码来实现
#define _XOPEN_SOURCE
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
char key[20] = "root";
char salt[20] = "$1$X1FNdStG";
printf("%s\n", crypt(key, salt));
return 0;
}
编译的时候使用
gcc -o main main.c -lcrypt
执行就OK了。