0

如何使用哈希函数

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)

但结果我得到了垃圾数据。

4

2 回答 2

1

如果没有看到InpData我们无法确定的声明,(请发布一个简短的可编译示例),但很可能InpData是某种指针,而不是数组。运算符在sizeof()应用于指针时,不会计算指向的已分配存储的大小,而是计算指针的大小:通常为 4 或 8 个字节。

于 2013-05-17T17:27:16.390 回答
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。在将结果显示到屏幕之前对其进行编码。

编辑:完全没有干净代码点的极其简单和骇人的十六进制编码:)

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;
}
于 2013-05-17T17:27:57.733 回答