Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C SHA256为每个输入生成相同的哈希值_C - Fatal编程技术网

C SHA256为每个输入生成相同的哈希值

C SHA256为每个输入生成相同的哈希值,c,C,我正在使用SHA256在循环中的C中生成哈希值,以及要为其生成哈希的值,循环的计数器变量也被传递。由于计数器变量的值在每次迭代中都会发生变化,所以我希望SHA256每次都返回不同的哈希值。但它每次都返回相同的哈希值。 请帮忙 提前谢谢 代码: int生成\u sha256hash{ int循环=0; 无符号字符散列参数[2]={0}; 无符号字符设备\u id[2]={0,0}; 散列参数[0]=0; 未签名字符传递\u string=“PASSWORD”; for(循环=1;循环

我正在使用SHA256在循环中的C中生成哈希值,以及要为其生成哈希的值,循环的计数器变量也被传递。由于计数器变量的值在每次迭代中都会发生变化,所以我希望SHA256每次都返回不同的哈希值。但它每次都返回相同的哈希值。 请帮忙

提前谢谢

代码:

int生成\u sha256hash{
int循环=0;
无符号字符散列参数[2]={0};
无符号字符设备\u id[2]={0,0};
散列参数[0]=0;
未签名字符传递\u string=“PASSWORD”;
for(循环=1;循环<10;循环++){
hash_参数[1]=循环;
memcpy((无符号字符)(&input_info[0]),(无符号字符)散列参数,2);
memcpy((无符号字符)(&input_info[2]),(无符号字符)设备_id,2);
memcpy((无符号字符)(&device_info[4]),(无符号字符*)au8defaultPwd,8);
printf(“\n生成哈希值”);
散列值=SHA256(设备信息,14,au8HashValue);
}
} 

在循环中更改
输入信息(取决于计数器),但不要将其用于哈希生成。您只使用
设备信息


我认为
memcpy
调用中对
unsigned char
的所有强制转换实际上都是对
unsigned char*
的强制转换,这是应该的。您的代码中还有其他语法特性。

请发布一些代码好吗?我猜你的计数器没有更新或者没有被正确使用。谢谢氪石鸽的回复。我正在添加相同的代码片段。int generate_sha256; hash{int loop=0;unsigned char hash_参数[2]={0};unsigned char device_id[2]={0,0};hash_参数[0]=0;unsigned char pass_string=“PASSWORD”;for(loop=1;loop<10;loop++){hash_参数[1]=loop;memcpy((unsigned char)(&input_info[0]),unsigned char)hash_参数,2);memcpy((unsigned char)(&input_info[2]),(unsigned char)device_id,2);memcpy((unsigned char)(&device_info[4]),(unsigned char*)au8defaultPwd,8);printf(\n生成哈希值”);hash_值=SHA256(device_info,14,au8HashValue);}这里是密码值,设备ID和第一个散列参数保持不变,但第二个散列参数的值不断变化,并且具有计数器变量“loop”的值。我不知道C,但我会将loop作为循环中的最后一个操作递增,因此在下一次迭代中,循环是之前的+1。为什么不在函数的开头将循环声明为1的整数?sha256hash{int loop=0;无符号字符哈希参数[2]={0};无符号字符设备id[2]={0,0};无符号字符哈希值=NULL;无符号字符pwd[8]={P','a','S','S','S','W','O','R','D'};哈希参数[0]=0;for(loop=1;loop<10;loop++){hash_参数[1]=循环;memcpy((无符号字符)(&input_信息[0]),(无符号字符)hash_参数,2);memcpy((无符号字符)(&input_信息[2]),(无符号字符*)设备_id,2);memcpy((无符号字符*)(&input_信息[4]),(无符号字符*)pwd 8;hash_值=SHA256(input_信息,14,HashValue);}谢谢jpalecek的回复,我现在已经粘贴了正确的代码,请建议。
int generate_sha256hash { 
  int loop = 0; 
  unsigned char hash_paramters[2] = {0};
  unsigned char device_ids[2] = {0,0}; 
  hash_paramters[0] = 0; 
  unsigned char pass_string = "PASSWORD"; 

   for(loop = 1; loop < 10; loop++) {
     hash_paramters[1] = loop;
     memcpy((unsigned char)(&input_info[0]),(unsigned char )hash_paramters ,2); 
     memcpy((unsigned char)(&input_info[2]),(unsigned char )device_ids,2);
     memcpy((unsigned char)(&device_info[4]),(unsigned char*)au8defaultPwd,8); 

     printf("\n Generating Hash Value "); 

     hash_value = SHA256(device_info,14,au8HashValue); 
   }
}