如何使用散列函数
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)
但结果我得到了破坏的数据。
答案 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;
}