欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-19 14:14:46
...

前言

原本在学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为盐值
[代码]C语言进行md5,SHA256,SHA512加密