Blake2b哈希本机C库用法

问题描述 投票:0回答:1

我正在尝试在我的项目(此https://github.com/BLAKE2/BLAKE2)中使用本机C库,但我不清楚如何使用它:似乎可以使用逐步版本(blake2b_init,blake2b_update和blake2b_final)和更简单的一个(blake2b)。

[这里(https://tools.ietf.org/html/rfc7693#appendix-A)我找到了关于它的完整解释,以及一个使用示例(第26页),在该示例中,他们只是这样做(我也不想使用该键):

blake2b(md, outlen, NULL, 0, in, inlen);

我的问题之一是,在库源代码(blake2.h)中,我找到了下面的“简单API”

int blake2b( void *out, size_t outlen, const void *in, size_t inlen, const void *key, size_t keylen );

因此语法不同:输入和键位置被交换。

[此外,在上一个问题(BLAKE2 input parameters)中,说应该检查结果(正确的是0时)。我知道他们在这里使用blake2s,但结果对于blake2b也应相同。

我的主要问题是我同时尝试了两种用法,但结果始终为-1。因此,我认为我没有正确使用该库。

这是我的代码。

const char* pInput = "test text";
char* pOutput = new char[128];
int nRes = blake2b(pOutput, 128, pInput, strlen(pInput), NULL, 0);

const char* pInput = "test text";
char* pOutput = new char[128];
int nRes = blake2b(pOutput, 128, NULL, 0, pInput, strlen(pInput));

结果始终为-1,在输出中我没有哈希。

是否有人使用过此库和/或有更新的文档以显示正确的用法?

c++ c hash
1个回答
1
投票

问题是,您要blake2b()产生128字节的输出,而它最多只能产生32字节。头文件中有一个enumBLAKE2B_OUTBYTES。所以写:

const char *pInput = "test text";
char *pOutput = new char[BLAKE2B_OUTBYTES];
int nRes = blake2b(pOutput, BLAKE2B_OUTBYTES, pInput, strlen(pInput), NULL, 0);
© www.soinside.com 2019 - 2024. All rights reserved.