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

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系统geth的安装

    转载地址 https://blog.csdn.net/qq_36124194/article/details/83658580 安装ethereum sudo apt-get install software-properties-common sudo add-apt-repository -y ppa:ethereum/ethereum sudo apt…

    Linux 2023年4月11日
    00
  • Linux cancel命令

    以下是关于Linux cancel命令的完整攻略。 简介 cancel命令用于取消指定的打印任务,并将其从打印队列中移除。同时,它还提供了一些可选参数,可以用于指示要取消的特定打印任务或设置取消后打印机的行为。 语法 cancel [-u <user>] [-a] [-h <hostname>] [-t <destination…

    Linux 2023年3月28日
    00
  • Centos7使用yum安装MySQL及实现远程连接的方法

    以下是“Centos7使用yum安装MySQL及实现远程连接的方法”的完整攻略: 1. 安装MySQL CentOS 7 中默认安装了 MariaDB 数据库,如果想要安装 MySQL 需要先卸载 MariaDB。 # 卸载 MariaDB 数据库 sudo yum remove mariadb-libs # 清理残留文件和目录 sudo rm -rf /v…

    Linux 2023年5月14日
    00
  • C#实现聊天消息渲染、图文混排(支持Windows、Linux)

    在实现聊天软件时,渲染文字表情图文混排是一项非常繁琐的工作,再加上还要支持GIF动图、引用消息、撤回消息、名片等不同样式的消息渲染时,就更加麻烦了。那么有简单的实现办法吗?嗯,有的。   在实现聊天软件时,渲染文字表情图文混排是一项非常繁琐的工作,再加上还要支持GIF动图、引用消息、撤回消息、名片等不同样式的消息渲染时,就更加麻烦了。        好在我们…

    Linux 2023年4月10日
    00
  • 在linux中使用包管理器安装node.js

    下面我将详细讲解在Linux中使用包管理器安装Node.js的完整攻略。 安装Node.js 1. 使用apt命令安装Node.js 如果你使用的是Debian或Ubuntu系统,可以使用apt命令来安装Node.js。 打开终端并执行以下命令: $ sudo apt update $ sudo apt install nodejs 以上命令将更新包列表并安…

    Linux 2023年5月14日
    00
  • CentOS下使用yum命令安装计划任务程序crontab的方法

    下面是详细讲解“CentOS下使用yum命令安装计划任务程序crontab的方法”的完整攻略: 1. 确认系统已安装yum yum是CentOS下常用的包管理工具,我们需要先确认系统已经安装了yum。可以通过以下命令进行检查: yum –version 如果系统已经安装了yum,会输出yum的版本信息,如果没有安装则会提示找不到命令。 2. 安装cront…

    Linux 2023年5月14日
    00
  • Win10安装Linux系统的教程图解

    当在Win10系统上安装Linux系统时,我们需要了解一些基础知识,以便了解所需的步骤以及操作系统之间的关键区别。 步骤 步骤1:准备所需工具和软件 安装Linux系统需要以下工具和软件:- 一个可引导的Linux安装映像文件(ISO)- 一个用于创建Linux引导驱动器的工具,如Rufus或Etcher- 数据备份存储,以便在安装过程中不会丢失数据 步骤2…

    Linux 2023年5月24日
    00
  • Linux下的Java配置与tomcat配置

    下面是关于”Linux下的Java配置与tomcat配置”的完整攻略。 一、Java配置 1. 安装Java 首先我们需要在Linux环境下安装Java,可以通过以下命令进行安装: sudo apt update sudo apt install default-jdk 安装完成后,可以通过java -version命令来检查Java是否成功安装。 2. 配…

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