关于/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了。