C使用sha2散列函数

时间:2013-05-17 17:19:37

标签: c sha

如何使用散列函数

void sha2( const unsigned char *input, int ilen,
           unsigned char output[32] )
{
    sha2_context ctx;

    sha2_starts( &ctx );
    sha2_update( &ctx, input, ilen );
    sha2_finish( &ctx, output );

    memset( &ctx, 0, sizeof( sha2_context ) );
}

我试过

sha2(InpData, sizeof(InpData), OutData)

但结果我得到了破坏的数据。

2 个答案:

答案 0 :(得分:0)

没有看到InpData的声明,我们无法确切知道,(Please, post a short, compilable example),但概率是InpData是某种指针,而不是阵列。 sizeof()运算符在应用于指针时,不会计算为指向的已分配存储的大小,而是计算指针的大小:通常为4或8个字节。

答案 1 :(得分:0)

只需使用您希望输出的数据,长度和缓冲区调用它;

char* data = "my data to hash";
int datalen = strlen(data);       // or if binary data, the size of your input
unsigned char buffer[32];         // The buffer to receive the result

sha2(data,datalen,buffer);

请注意,缓冲区中接收的数据是二进制数据(如果它是SHA-256,则为32 * 8 = 256位),因此您需要hex / base64 / etc.在将结果显示到屏幕之前对其进行编码。

编辑:非常简单和hackish十六进制编码完全没有干净的代码点:))

char* hexencode(void* data, int len)
{
  char* outdata = malloc(len*2+1);
  char* tmp = outdata;
  unsigned char* indata = (char*)data;
  while(len--)
  {
    *tmp++ = "0123456789abcdef"[(*indata)>>4];
    *tmp++ = "0123456789abcdef"[(*indata++)&0xf];
  }
  *tmp = 0;
  return outdata;
}