- gcc -o cryptword cryptword.c -lcrypt
- ----------------------------------------------
- #define _XOPEN_SOURCE
- #include <stdio.h>
- #include <shadow.h>
- #include <sys/types.h>
- #include <string.h>
- #include <stdlib.h>
- #include <unistd.h>
- int main()
- {
- char *password;
- password = crypt("123456","$1$XnPos$");
- printf("---->%s<----/n",password);
- }
- ------------------------------------------------
2.3MD5算法
它是真正的散列算法。允许无限长的口令。它使用的salt空间也别DES算法大得多,所以两口令相同的可能性更小。它也通过调用crypt(3)函数实现。MD5算法使用的 salt必须以$1$开头,并以$结尾。且salt长度为8个字符。例如要用abcdef为salt 散列mypass,那么如下:
%perl -e 'print crypt("mypass","/$1/$abcdef/$"),"/n"'
$1$abcdef$nRHvewzGzJoYskdQAIEQr
注:上例中的"/n"均为转义字符。salt值为$1$abcdef$,原始密码为mypass,散列值为:$1$abcdef$nRHvewzGzJoYskdQAIEQr,MD5算法得到的散列值为31个字符长,并且都以$1$开头。