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 open命令

    Linux open命令的作用与使用方法 open命令是Linux和macOS系统中的一个命令行工具,它用于打开指定文件、目录或URL地址。open命令不仅可以快速打开文件,还可以调用系统默认的程序来打开文件,便于用户快速访问文件。下面我将详细介绍open命令的使用方法。 语法 open [-a 应用程序] [-b 包标识符] [-f] [-n] [-g] …

    Linux 2023年3月28日
    00
  • VMware10不能安装64位(linux)系统,提示此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态

    今天下载VM10准备安装Ubuntu14.04,一如既往的进行安装,突然发现出现了问题:此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态,具体如图: 如图中提示可重启电脑进入BIOS界面(根据电脑型号按快捷键进入:惠普F9,华硕F7等上网可查),然后将将“高级”设置中“Intel 虚拟化技术”开启(通过左右上下键锁定控件,回车键进行选…

    Linux 2023年4月13日
    00
  • Virtualbox 安装centos7虚拟机的图文教程详解

    Virtualbox 安装 CentOS 7 虚拟机的图文教程详解 本教程旨在帮助读者了解在 VirtualBox 中安装 CentOS 7 虚拟机的详细过程。以下是安装步骤: 步骤一:下载 CentOS 7 镜像文件 在官方网站下载符合你系统位数的CentOS 7镜像文件,CentOS-7-x86_64-DVD-2009.iso 是目前 CentOS 7 …

    Linux 2023年5月24日
    00
  • linux安装mysql 8.0.x的完整步骤

    以下是Linux安装mysql8.0.x完整步骤的攻略: 1. 下载mysql安装包 可以上mysql官网下载安装包,根据自己的操作系统选择合适的版本,例如: wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz 2. 解压安…

    Linux 2023年5月14日
    00
  • Linux下安装nginx的实现方法

    以下是详细的攻略: Linux下安装nginx的实现方法 确认环境 在安装nginx之前,需要确认一下系统环境是否满足要求: 系统版本:一般情况下,CentOS和Ubuntu都可以安装nginx,需要确认系统的版本,以确定选择哪个源来获取二进制文件。 确认系统是否已经安装了其他web服务器,如Apache、Lighttpd等,如果已经安装了,需要先停止这些进…

    Linux 2023年5月14日
    00
  • Linux fgconsole命令

    Linux fgconsole命令 命令作用 Linux fgconsole命令的作用是显示当前活动的虚拟控制台号。 命令格式 fgconsole [-n] 参数说明 -n:设置打印结果的字符串类型。默认情况下,在屏幕上打印当前虚拟控制台的数字编号,选项“-n”用于打印当前虚拟控制台的名称字符串,而不是编号。 使用方法 显示当前的虚拟控制台编号。 fgcon…

    Linux 2023年3月28日
    00
  • Linux各项目环境部署记录(换服务器部署脚本整理)

    对于“Linux各项目环境部署记录(换服务器部署脚本整理)”这个主题,我可以给出如下的详细攻略。 1. 确定部署目标 在进行环境部署之前,我们需要先明确自己的部署目标,例如是要搭建一个Web服务器、还是要部署一个数据库服务器等等。不同的目标对应着不同的环境配置,因此要根据需要选择合适的环境配置方案。 2. 确定操作系统版本 在确定了部署目标之后,我们需要选择…

    Linux 2023年5月14日
    00
  • [Linux] 使用openssl实现RSA非对称加密

    简单定义:公钥和私钥,加密和解密使用的是两个不同的密钥,所以是非对称 系统:ubuntu 14.04 软件:openssl java php   生成公钥私钥 使用命令生成私钥: openssl genrsa -out rsa_private_key.pem 1024 参数:genrsa 生成密钥   -out 输出到文件  rsa_private_key.…

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