You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C语言实现基于hashcat/John the Ripper的哈希密码可破解性检测终端工具?

用C语言编写哈希破解检测程序完全可行

当然可以,凭借你现有的C语言基础知识,完全能写出一个终端程序,借助hashcat或John the Ripper的字典文件来检测目标密码哈希是否可被破解。核心逻辑很直接:遍历字典里的每一个密码,计算它的哈希值,和目标哈希对比——匹配上就说明这个哈希能被字典里的密码破解。

下面是具体的实现思路和简单示例:

核心步骤

  • 依赖哈希库:自己实现哈希算法太麻烦,直接用OpenSSL的哈希函数(比如MD5、SHA-256这些),C语言里可以直接调用,编译时链接对应的库就行。
  • 读取字典文件:用C标准库的文件操作函数,比如fopen()打开字典,fgets()逐行读取密码(记得去掉每行末尾的换行符)。
  • 计算并转换哈希:对每个读取到的密码,调用哈希函数生成二进制哈希值,再把二进制转成十六进制字符串(方便和目标哈希直接对比)。
  • 哈希对比:把计算出的十六进制哈希和目标哈希字符串做比较,相等就输出破解成功的提示和对应的密码。

简单示例代码(MD5哈希检测)

#include <stdio.h>
#include <string.h>
#include <openssl/md5.h>

// 把二进制哈希转成十六进制字符串
void hash_to_hex(unsigned char *hash, char *hex_str) {
    for (int i = 0; i < MD5_DIGEST_LENGTH; i++) {
        sprintf(hex_str + (i * 2), "%02x", hash[i]);
    }
    hex_str[MD5_DIGEST_LENGTH * 2] = '\0';
}

int main(int argc, char *argv[]) {
    if (argc != 3) {
        printf("用法: %s <目标哈希> <字典文件路径>\n", argv[0]);
        return 1;
    }

    char *target_hash = argv[1];
    char *dict_path = argv[2];
    FILE *dict_file = fopen(dict_path, "r");
    if (!dict_file) {
        perror("无法打开字典文件");
        return 1;
    }

    char password[256];
    unsigned char md5_hash[MD5_DIGEST_LENGTH];
    char computed_hash[33]; // MD5是32位十六进制字符串,加1存结束符

    while (fgets(password, sizeof(password), dict_file)) {
        // 去掉换行符
        password[strcspn(password, "\n")] = '\0';
        
        // 计算MD5哈希
        MD5((unsigned char *)password, strlen(password), md5_hash);
        // 转成十六进制
        hash_to_hex(md5_hash, computed_hash);
        
        // 对比哈希
        if (strcmp(computed_hash, target_hash) == 0) {
            printf("哈希已破解!密码是: %s\n", password);
            fclose(dict_file);
            return 0;
        }
    }

    printf("字典中未找到匹配的密码\n");
    fclose(dict_file);
    return 0;
}

编译与运行

编译时需要链接OpenSSL的crypto库:

gcc hash_check.c -o hash_check -lcrypto

运行示例(假设目标MD5哈希是5f4dcc3b5aa765d61d8327deb882cf99,对应密码password):

./hash_check 5f4dcc3b5aa765d61d8327deb882cf99 rockyou.txt

注意事项

  • 要支持其他哈希算法(比如SHA-256),只需要替换MD5相关的函数(比如SHA256())和对应的哈希长度常量。
  • 直接用hashcat或John the Ripper自带的字典文件就行,比如常见的rockyou.txt,不需要自己生成。
  • 大字典文件不用一次性加载到内存,逐行读取更节省资源。
  • 如果遇到非ASCII的密码,要注意编码处理,避免计算哈希时出错。

内容的提问来源于stack exchange,提问作者Joshua Barnes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 19:14:54