BLAKE2 输入参数

BLAKE2 input parameters

作为新手,我正在阅读有关最近一批哈希函数的论文,BLAKE2 引起了我的兴趣。然后我想玩一下代码包中的"blake2s"代码。

如果我要实现一个简单的字符串哈希器,我可以理解有用于键和盐的内置变量。

但我不知道如何提供字符串或文件作为输入并收集哈希作为输入。哪些变量负责消息和摘要?

也许我做错了,但下面没有打印任何输出。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "blake2s.h"
#include "blake2s.c"

#define SIZE 1024

int main(){
    unsigned char *str, *hash;
    str = malloc(SIZE * sizeof *str);
    hash = malloc(32 * sizeof *str);
    printf("> ");
    scanf("%s", str);
    int a = blake2s(hash, str, NULL, 32, 1024, 0);
    if(a)
        printf("%s", hash);
    return 0;
}

您的程序有两个与打印哈希直接相关的问题:

  1. 返回0表示成功。所以你的 if 需要用

    之类的东西代替
    if(a==0)
         printf("%s", hashStr);
    else
         printf("error %d", a);
    
  2. 散列是原始二进制,甚至可以包含 [=13=] 字节。您应该在打印之前应用十六进制或 Base64 编码。

以及其他一些错误和风格问题:

  1. 您可能想用 strlen(str) 替换传递给散列器的 1024,因此它只对实际字符串进行散列。

  2. 如果用户输入超过 1024 字节,您的程序会发生缓冲区溢出。测试程序中没有什么大问题,但是您应该在正确的实现中修复一些问题,因为它是一个安全漏洞。

  3. sizeof(char) == 1 根据定义