C BLAKE2输入参数
作为一个新手,我正在阅读关于最近一批散列函数的论文,这引起了我的兴趣。然后我想玩一下代码包中的“blake2s”代码 如果我要实现一个简单的字符串哈希器,我就可以理解密钥和salt有内置变量 但我不知道如何提供字符串或文件作为输入,并收集散列作为输入。哪些变量负责消息和摘要 也许我做错了,但下面没有打印任何输出C BLAKE2输入参数,c,hash,cryptography,C,Hash,Cryptography,作为一个新手,我正在阅读关于最近一批散列函数的论文,这引起了我的兴趣。然后我想玩一下代码包中的“blake2s”代码 如果我要实现一个简单的字符串哈希器,我就可以理解密钥和salt有内置变量 但我不知道如何提供字符串或文件作为输入,并收集散列作为输入。哪些变量负责消息和摘要 也许我做错了,但下面没有打印任何输出 #include <stdio.h> #include <stdlib.h> #include <string.h> #include "blake2
#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;
}
#包括
#包括
#包括
#包括“blake2s.h”
#包括“blake2s.c”
#定义大小1024
int main(){
无符号字符*str,*hash;
str=malloc(大小*大小*str);
hash=malloc(32*sizeof*str);
printf(“>”);
scanf(“%s”,str);
inta=blake2s(散列,str,NULL,321024,0);
如果(a)
printf(“%s”,散列);
返回0;
}
您的程序有两个与打印哈希直接相关的问题:
0
表示成功。因此,您的if
需要替换为以下内容
if(a==0)
printf("%s", hashStr);
else
printf("error %d", a);
\0
字节。在打印之前,应该应用十六进制或Base64编码sizeof(char)==1
哎呀。如果我现在给它加盐,那么我是否需要将盐从/dev/(u)random中输送出来?我认为使用salt特性没有多大意义,而且参考实现也没有公开它。第三个参数是键,要用作键的内容取决于您正在执行的操作。它与HMAC或HKDF的键几乎相同。请注意,
scanf(“%s”,str)
只读取第一个空格(空白、制表符、换行符)。通常,打印您读取的数据是一个好主意,这样您就知道程序得到了您认为它得到的东西。如果在程序中键入单词,则只对第一个单词进行哈希运算。或者,更糟糕的是,如果blake2s()
的1024个参数表示“有1024字节的数据要散列”,则您将不确定的数据传递给函数,因为malloc()
没有义务将分配的内存设置为任何特定值。