【问题标题】:C using sha2 hashing functionC使用sha2散列函数
【发布时间】:2013-05-18 01:57:56
【问题描述】:

如何使用散列函数

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)

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

【问题讨论】:

  • memset 的意义何在?
  • @CarlNorum memset 的唯一要点是不要将 SHA-2 上下文留在堆栈上,以便对原始字符串进行逆向工程。哈希对反转具有弹性,上下文状态可能不是。当然在这种情况下,原始字符串也没有被覆盖的整个问题...... :)

标签: c sha


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    只需使用您想要输出的数据、长度和缓冲区调用它即可;

    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;
    }
    

    【讨论】:

    • 它没有帮助,仍在获取垃圾数据,但我得到的时间有点长:ĹWç=pÓK1Ău!SŕĘDđˇá; ŞR ň|éG?-RcşáUË6ŕÚíÄÇÎ]«ts 而正确的哈希是:d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592
    • 阅读底部的注释,你想要的结果是十六进制编码的二进制,而 sha2 的结果只是普通的二进制。
    • 如何在 C 中简单地将其编码为 asci,新手问,我是 C 中的新手?
    • @user2304765 添加了一个简单的十六进制编码。如果您没有得到正确的结果,我们需要知道您尝试编码的内容以尝试重复结果,因此您需要添加一些代码。
    • 仍然有效,这里是警告wklej.to/JuJ2f,来源:wklej.to/ljb6k
    猜你喜欢
    • 2018-12-27
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 2010-10-19
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    相关资源
    最近更新 更多