变量在for循环中被crypt()意外覆盖
我正在尝试构建一个C程序,它将强制执行参数中给定的哈希。代码如下:变量在for循环中被crypt()意外覆盖,c,hash,brute-force,crypt,C,Hash,Brute Force,Crypt,我正在尝试构建一个C程序,它将强制执行参数中给定的哈希。代码如下: #包括 #包括 #包括 #包括 常量字符设置[]=“$6$QSX8hjVa$”; 常量字符值[]=“ABCDEFGHIJKLMNOPQRSTUVWXYZABCDFGHIJKLMNOPQRSTUVWXYZ0123456789”; int main(int argc,char*argv[]) { char*hashToTrack=crypt(argv[1],设置); printf(“%s\n”,hashToCrack); 对于(in
#包括
#包括
#包括
#包括
常量字符设置[]=“$6$QSX8hjVa$”;
常量字符值[]=“ABCDEFGHIJKLMNOPQRSTUVWXYZABCDFGHIJKLMNOPQRSTUVWXYZ0123456789”;
int main(int argc,char*argv[])
{
char*hashToTrack=crypt(argv[1],设置);
printf(“%s\n”,hashToCrack);
对于(int i=0;i
为了方便起见,我只在参数中提供一个字符串,该字符串将被破解。它在主函数的开头加密(存储在hashToCrack中)。现在,我只使用一个字符。我这样编译程序:gccmain.c-omain-lcrypt-Wall
问题-当我启动此程序时,我在for循环的每个迭代中都“找到了!”。看来hashToCrack和try是一样的。但是,我从不覆盖hashtorack,因此它永远不会更改
可能有些东西我用指针不明白,但我找不到
有什么想法吗D函数
crypt
返回指向静态数据缓冲区的指针。因此,当您再次调用它时,hashToTrack
指向的字符串会发生变化
您需要将第一次调用crypt
的结果复制到一个单独的缓冲区中
char *hashToCrack = strdup(crypt(argv[1], setting));
使用完此缓冲区后,不要忘记调用free