【问题标题】:strcmp() unsigned char to string within a filestrcmp() unsigned char 到文件中的字符串
【发布时间】:2019-08-31 20:12:49
【问题描述】:

我需要一种方法,通过该方法可以将此哈希函数的输出与位于单独文件中的字符串进行比较,但输出通常定义为printf("%02x", c[i]);(注释所在的位置)。这种格式不适用于比较,我不确定如何从本质上调整这种格式。

            FILE *ftest=fopen(hashInBuf, "rb");
            SHA512_Init (&mdContext);
            while ((bytes = fread (data, 1, 1024, ftest)) != 0)
                SHA512_Update (&mdContext, data, bytes);
            SHA512_Final (c,&mdContext);
            if(access(hashOutBuf, F_OK) != -1){
               for(i = 0; i < SHA512_DIGEST_LENGTH; i++){
                 //METHOD TO COMPARE WITH TO EXISTING HASH FILE (stored in seperate folder)
               }
            }

文件中的字符串是这个散列函数的输出(使用fprintf(*file, "%02x", c[i]); 存储)——它位于上面的注释位置。先感谢您。

【问题讨论】:

  • 我不确定我是否理解问题所在。您要比较哪些变量?你不能用sscanf("%2x")解析十六进制值,然后比较数字吗?或者sprintf("%02x")将数字转换为字符串然后使用strcmp()?

标签: c arrays hash file-io strcmp


【解决方案1】:

将外部字符串的每一对字符转换为整数。

const char *external_string = "2435CD76F...";
for(i = 0; i < SHA512_DIGEST_LENGTH; i++) {
  //         v------------------------------------------------v Compound literal (C99) 
  if (strtol((char [3]){external_string[0], external_string[1]}, 0, 16) != data[i]) {
    return Different;
  }
  external_string += 2;
}
return Same;

确保dataunsigned char 或使用.... != (unsigned char) data[i]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 2013-03-21
    • 1970-01-01
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    相关资源
    最近更新 更多