【发布时间】:2015-05-03 00:34:28
【问题描述】:
作为一个新手,我正在阅读有关最近一批哈希函数的论文,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;
}
【问题讨论】:
-
糟糕。如果我现在要给它加盐,那么我需要从 /dev/(u)random 管道输送盐吗?
-
我认为使用 salt 功能没有多大意义,而且 AFAIK 参考实现并没有公开它。第三个参数是键,你想用什么作为键取决于你在做什么。它与 HMAC 或 HKDF 的密钥几乎相同。
-
请注意,
scanf("%s", str)最多只能读取第一个空格(空格、制表符、换行符)。打印您读取的数据通常是一个好主意,这样您就知道程序得到了您认为的数据。如果您在程序中键入单词,则只会对第一个单词进行哈希处理。或者,更糟糕的是,如果blake2s()的 1024 参数说“有 1024 个字节的数据要散列”,那么您将不确定的数据传递给函数,因为malloc()没有义务将分配的内存设置为任何特定值。
标签: c hash cryptography