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
相关产品推荐
相关产品推荐

