首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C使用sha2散列函数

C使用sha2散列函数
EN

Stack Overflow用户
提问于 2013-05-18 01:19:37
回答 2查看 265关注 0票数 0

如何使用散列函数

代码语言:javascript
复制
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 ) );
}

我试过了

代码语言:javascript
复制
sha2(InpData, sizeof(InpData), OutData)

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

EN

回答 2

Stack Overflow用户

发布于 2013-05-18 01:27:16

如果没有看到InpData的声明,我们就不能确定(Please, post a short, compilable example),但InpData可能是某种类型的指针,而不是数组。当sizeof()运算符应用于指针时,它不会计算所指向的已分配存储的大小,而是计算指针的大小:通常是4或8字节。

票数 1
EN

Stack Overflow用户

发布于 2013-05-18 01:27:58

只需调用它的数据,长度和缓冲区,你想你的输出;

代码语言:javascript
复制
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/等编码。

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

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16614687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档