gpt4 book ai didi

c - BLAKE2 输入参数

转载 作者:太空宇宙 更新时间:2023-11-04 08:30:00 25 4
gpt4 key购买 nike

作为新手,我正在阅读有关最近的散列函数和 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. 散列是原始二进制,甚至可以包含 \0 字节。您应该在打印之前应用十六进制或 Base64 编码。

还有一些其他错误和风格问题:

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

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

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

关于c - BLAKE2 输入参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28813502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com