如何使用散列函数
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)但结果是我得到了垃圾数据。
发布于 2013-05-18 01:27:16
如果没有看到InpData的声明,我们就不能确定(Please, post a short, compilable example),但InpData可能是某种类型的指针,而不是数组。当sizeof()运算符应用于指针时,它不会计算所指向的已分配存储的大小,而是计算指针的大小:通常是4或8字节。
发布于 2013-05-18 01:27:58
只需调用它的数据,长度和缓冲区,你想你的输出;
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位),因此在将结果显示到屏幕之前,您需要对其进行十六进制/base64/等编码。
编辑:非常简单和黑客的十六进制编码,完全没有干净的代码点:)
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;
}https://stackoverflow.com/questions/16614687
复制相似问题