[代码]C语言进行md5,SHA256,SHA512加密

前言

原本在学puppet,它的user资源需要设置hash后的散列值,结果…我把加密算法,shadow文件,密码破解搞了个遍…

环境

  • CentOS7
  • gcc编译器

/etc/shadow文件解析

文件的格式为:
{用户名}:{加密后的口令密码}:{口令最后修改时间距原点(1970-1-1)的天数}:{口令最小修改间隔(防止修改口令,如果时限未到,将恢复至旧口令):{口令最大修改间隔}:{口令失效前的警告天数}:{账户不活动天数}:{账号失效天数}:{保留}

其中{加密后的口令密码}的格式为 $id$salt$encrypted

id为1时,采用md5算法加密
id为5时,采用SHA256算法加密
id为6时,采用SHA512算法加密
salt为盐值,是对密码进行hash的一个干扰值
encrypted为散列值

代码

#define _XOPEN_SOURCE
#include <pwd.h>
#include <stddef.h>
#include <string.h>
#include <shadow.h>
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
    if(argc!=3)
        return -1;
    char *buf = crypt((const char *)argv[1], (const char *)argv[2]);
    printf("salt: %s, crypt: %s\n", argv[2], buf);
    return 0;
}

安装编译器

yum -y install gcc gcc-c++ kernel-devel

编译运行

vim passwd.c		#将上面的代码写入此文件
gcc passwd.c -lcrypt -o passwd		#编译后输出名为passwd的文件
./passwd 123 \$6\$39jmd4Yh			#这里的意思是:加密123,6表示使用SHA512加密(上文提到过),39jmd4Yh为盐值

发布了99 篇原创文章 · 获赞 44 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/NetRookieX/article/details/96434912