我正在尝试在我的项目(此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,在输出中我没有哈希。
是否有人使用过此库和/或有更新的文档以显示正确的用法?
问题是,您要blake2b()
产生128字节的输出,而它最多只能产生32字节。头文件中有一个enum
:BLAKE2B_OUTBYTES
。所以写:
const char *pInput = "test text";
char *pOutput = new char[BLAKE2B_OUTBYTES];
int nRes = blake2b(pOutput, BLAKE2B_OUTBYTES, pInput, strlen(pInput), NULL, 0);