如何在C中将原始的64字节二进制文件转换为十六进制或ASCII

时间:2017-12-07 19:33:16

标签: c hash binary type-conversion sha512

我在C中使用SHA512来获取哈希值。我是这样做的:

#include <stdlib.h>
#include <stdio.h>
#include <openssl/sha.h>

int main(int argc, char *argv[]){

    unsigned char hash[SHA512_DIGEST_LENGTH];

    char data[] = "data to hash";          //Test Data
    SHA512(data, sizeof(data) - 1, hash);  //Kill termination character
    //Now there is the 64byte binary in hash

我试图通过以下方式将其转换为十六进制:

long int binaryval, hexadecimalval = 0, i = 1, remainder;

binaryval=(long int)hash;
        while (binaryval != 0)
        {
            remainder = binaryval % 10;
            hexadecimalval = hexadecimalval + remainder * i;
            i = i * 2;
            binaryval = binaryval / 10;
        }
        printf("Outpunt in Hex is: %lX \n", hexadecimalval);


        printf("%d\n",(long int) awhash );
        return 0;
    }

但这不是我想要的。

如何将无符号字符中的二进制转换为人类可读格式?用于打印的char []中的最佳案例。

“要哈希的数据”的哈希应该是:

  

d98f945fee6c9055592fa8f398953b3b7cf33a47cfc505667cbca1adb344ff18a4f442758810186fb480da89bc9dfa3328093db34bd9e4e4c394aec083e1773a

1 个答案:

答案 0 :(得分:1)

只需在printf()中使用%x打印每个字符。不要转换,只需使用原始数据:

int main(int argc, char *argv[]){

  unsigned char hash[SHA512_DIGEST_LENGTH];

  char data[] = "data to hash";          //Test Data
  SHA512(data, sizeof(data) - 1, hash);  //Kill termination character

  //Now there is the 64byte binary in hash
  for(int i=0; i<64; i++)
  {
    printf("%02x", hash[i]);
  }
  printf("\n");
}

编辑为只输出十六进制值,不输入逗号或空格。