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

C语言中crypt函数传入相同密钥却生成不同输出问题

解决C语言中crypt函数相同密钥输出不同的问题

嘿,这个问题我之前也踩过坑!核心问题出在你给crypt函数传的参数不符合要求——你没有传一个合法的C字符串给它当密钥。

crypt函数的第一个参数要求是以空字符'\0'结尾的字符串,但你现在传的是&Key1,也就是单个char变量的地址。这就麻烦了:crypt会从这个地址开始一直读字节,直到碰到'\0'才停下。而Key1后面的栈内存里都是随机的垃圾值,每次运行这些值都不一样,相当于crypt每次都在用不同的“隐形加长版密钥”生成哈希,结果当然不一样了。

另外,你的Salt数组也有问题!你定义的是char Salt[2],但crypt的第二个参数同样需要是字符串(前两位是盐值,后面必须跟着'\0'),否则它也会读取后面的垃圾值,这也可能导致哈希结果不稳定。

给你修正后的代码片段,应该能解决问题:

string HashedPassword;
string Hash = argv[1];
// 给Salt分配3个字符空间,最后一位存终止符
char Salt[3];
Salt[0] = Hash[0];
Salt[1] = Hash[1];
Salt[2] = '\0'; // 必须加终止符,把Salt变成合法字符串

// 把Key1改成数组,自带'\0'终止符,确保crypt只读到'a'
char Key1[2] = "a";
int Counter = 1;

do {
    HashedPassword = crypt(Key1, Salt); 
    printf("key1 value is :%c & hashed Password is : %s\n", Key1[0], HashedPassword);
    if(strcmp(Hash, HashedPassword) == 0) {
        // 匹配成功后的逻辑,比如输出找到的密钥
        printf("Found the key: %s\n", Key1);
        break;
    }
    // 这里记得加密钥的递增逻辑,比如从'a'遍历到'z'
    Key1[0]++;
} while(Counter);

最后再提个小提醒:编译的时候别忘了链接crypt库,要加-lcrypt参数,比如:

gcc crack.c -o crack -lcrypt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:55:34