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

it2022-05-05  123

前言

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

环境

CentOS7gcc编译器

/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为盐值

最新回复(0)