linux下c语言的crypt函数怎么用?

yizhihongxing

linux的crypt

最近学校布置了一个网安的小作业,要用到linux里面的这个crypt函数,写一篇总结一下。首先我们要了解这个函数是用来做什么的。

image-20230404230218492

密码影子文件中存储了每一个用户的用户明文和其单向哈希过的秘文

cipher = "$1$C68vnJ27$1ttFZ1/Rylq/xi350A0NI0";

密码字段用\(id\)salt$hashed的格式存储,其中id字段是1,salt是C68vnJ27,hash为1ttFZ1/Rylq/xi350A0NI0

其中$id表示计算密码密文所用的哈希算法,对应关系如下:

  • $1$ 表示 MD5
  • $5$ 表示 SHA-256
  • $6$ 表示 SHA-512
  • $2a$$2y$表示Blowfish算法

那这个由明文加密的过就是由crypt()函数完成的,crypt()是一个密码加密函数(将密码加密,明文变成密文),该函数基于数据加密标准(DES,Data Encryption Standard )算法以及基于DES的其他变种算法,该函数不依赖于计算机硬件实现数据加密。DES算法仅适合于加密字符串,也就是用于生成密码。尽管密码的生成有很多种方法。

salt的定义是在密码学中,是指通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为“加盐”。Salt 可以是任意字母、数字、或是字母或数字的组合,但必须是随机产生的,每个用户的 Salt 都不一样,用户注册的时候,数据库中存入的不是明文密码,也不是简单的对明文密码进行散列,而是 MD5( 明文密码 + Salt)。salt是一种混淆key的一段范围在abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./中的“随机”字符串,具体最小长度和最大长度根据加密方法的不同而不同。

image-20230404233332711

官方给出的crypt的用法是要传入一个密钥和一个salt,这个密钥就是用户密码。在编译c语言文件时,我们主要写成"gcc -o crypt crypt.c -lcrypt"去调用crypt这个库

现在题目给出了12位密钥中的前五位和后两位,中间5个都是数字,我们可以使用爆破的方式去实现一下crypt方法。

image-20230404234247466

直接给出代码

```c
//
// Created by ivanlee on 2023/3/26.
//
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <crypt.h>

const char* ans_cipher = "$1$XwynSv0a$qgSbP2GtPyeEyq6ZVWPUZ1";
const char* first5 = "*CMS";
const char* last2 = "c#";
const char* salt = "$1$XwynSv0a$";

int main(int argc, char* argv[]){
    for(int a=0; a<10;a++){
        char str[30];
        strcpy(str,first5);
        char tmpa;
        tmpa = '0' + a;
        str[5] = tmpa;
        for(int b=0; b<10;b++){
            char tmpb;
            tmpb = '0' + b;
            str[6] = tmpb;
            for(int c=0; c<10;c++){
                char tmpc;
                tmpc = '0' + c;
                str[7] = tmpc;
                for(int d=0; d<10;d++){
                    char tmpd;
                    tmpd = '0' + d;
                    str[8] = tmpd;
                    for(int e=0; e<10;e++){
                        char tmpe;
                        tmpe = '0'+e;
                        str[9]=tmpe;
                        str[10]='c';
                        str[11]='#';
                        char cipher[50];
                        char new[12];
                        strncpy(new,str,12);
                        strcpy(cipher,crypt(new,salt));
                        if(strcmp(cipher,ans_cipher)==0) {
                            printf("the ans is: %s\n", new);
                            return 0;
                        }

                    }
                }
            }
        }
    }
    return 0;

}

主要当我们了解了盐是什么,crypt是怎么加密的,这个判断爆破密码的很简单了,从00000开始到99999依次拼接进去进行加密,半分钟左右就爆出密码了

image-20230404234704340

原文链接:https://www.cnblogs.com/ivanlee717/p/17288313.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:linux下c语言的crypt函数怎么用? - Python技术站

(0)
上一篇 2023年4月17日
下一篇 2023年4月17日

相关文章

  • Linux jar包部署启停脚本

    一、对jar包统一管理     一、重启脚本 app_dir为jar包存放路径,根据自己的情况进行填写,这里我放在了/mycloud目录下apps 中填写jar包的名称,多个jar包中间以空格分开(注:jar包名称可以不完全填写,这里只写了前半部分,不和其他的应用重名即可) #!/bin/bash app_dir=/mycloud apps=(mycloud…

    Linux 2023年4月12日
    00
  • Linux iotop命令

    Linux iotop命令的作用与使用方法 iotop命令是一款Linux系统下的磁盘输入输出(I/O)监测工具。它可以实时地监测系统中每个进程的I/O使用情况,并对这些进程进行排序和分析,因此可以方便地查找出某个进程使用I/O的情况,从而快速地发现瓶颈,并进行优化。 命令使用方法 使用iotop命令需要先安装,使用以下命令进行安装: sudo apt-ge…

    Linux 2023年3月28日
    00
  • linux pxe网络装机无人值守

    项目分析远程装机的实现:配置DHCP+HTTP+TFTP提供通过vesamenu.c32模块实现图形PXE菜单为不同系统分别提供ks应答文件将第三方rpm包以yum源的方式提供:集中提供ntfs-3g,libreoffice的rpm包通过createrepo建立repodata 项目难点分析:PXE图形启动菜单需要准备的文件(由软件包syslinux-*提供…

    Linux 2023年4月12日
    00
  • Linux Shell 之 until循环语句

      until命令和while命令工作的方式完全相反。until命令要求你指定一个通常返回非零退出状态码的测试命令。只有测试命令的退出状态码不为0,bash shell才会执行循环中列出的命令。一旦测试命令返回了退出状态码0,循环就结束了。  和你想的一样,until命令的格式如下。 1 until test commands 2 do 3 other co…

    Linux 2023年4月11日
    00
  • linux下oracle11g R2的启动与关闭监听、数据库

    su – oracle           切换到oracle账户 lsnrctl start          启动监听 sqlplus /nolog     登陆sqlplus conn /as sysdba  或者 sqlplus / as sysdba    sysdba登陆到本机的数据库 startup  启动数据   shutdown immed…

    Linux 2023年4月11日
    00
  • Linux学习——ssh

    ssh 用于登录远程服务器 ssh登录 格式: ssh user@hostname -p 端口号(默认端口号22) 配置文件 创建文件~/.ssh/config 在文件中输入: Host myserver1 HostName IP地址或域名 User 用户名 Host myserver2 HostName IP地址或域名 User 用户名 此后登录服务器可以…

    Linux 2023年5月11日
    00
  • Linux命令之—find

    命令简介 find明林用于查找目录下的文件,同时也可以调用其他命令执行相应的操作 命令格式 find pathname -options [-print -exec -ok …] find [选项] [路径] [操作语句] 说明:1)注意find命令以及后面的选项和路径,操作语句,每个元素之间都至少要有一个空格。    2)注意子模块的先后顺序 命令参数…

    Linux 2023年4月13日
    00
  • linux下安装VMware出错:Gtk-Message: Failed to load module “canberra-gtk-module”解决方法

    最近又有兴趣在linux下搭建个虚拟机,于是去找了个VMWorkstation,安装的过程中报了两个错误 Gtk-Message: Failed to load module “pk-gtk-module”: libpk-gtk-module.so: cannot open shared object file: No such file or direct…

    Linux 2023年4月11日
    00
合作推广
合作推广
分享本页
返回顶部