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;
}
您的程序有两个与打印哈希直接相关的问题:
返回0
表示成功。所以你的 if
需要用
之类的东西代替
if(a==0)
printf("%s", hashStr);
else
printf("error %d", a);
散列是原始二进制,甚至可以包含 [=13=]
字节。您应该在打印之前应用十六进制或 Base64 编码。
以及其他一些错误和风格问题:
您可能想用 strlen(str)
替换传递给散列器的 1024,因此它只对实际字符串进行散列。
如果用户输入超过 1024 字节,您的程序会发生缓冲区溢出。测试程序中没有什么大问题,但是您应该在正确的实现中修复一些问题,因为它是一个安全漏洞。
sizeof(char) == 1
根据定义
作为新手,我正在阅读有关最近一批哈希函数的论文,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;
}
您的程序有两个与打印哈希直接相关的问题:
返回
之类的东西代替0
表示成功。所以你的if
需要用if(a==0) printf("%s", hashStr); else printf("error %d", a);
散列是原始二进制,甚至可以包含
[=13=]
字节。您应该在打印之前应用十六进制或 Base64 编码。
以及其他一些错误和风格问题:
您可能想用
strlen(str)
替换传递给散列器的 1024,因此它只对实际字符串进行散列。如果用户输入超过 1024 字节,您的程序会发生缓冲区溢出。测试程序中没有什么大问题,但是您应该在正确的实现中修复一些问题,因为它是一个安全漏洞。
sizeof(char) == 1
根据定义