我只想使用SHA-3-512。所以我使用了KeccakCodePackage。
我读了specification并使用它们。要检查我的结果,我使用以下Online-Hash-Website。
我对“部分数据”的结果是:
15دفحبخبصبض1فقف178سدصياس46سؤصددبصددعدعخ09اختدعصفخشدسبصدعفخب49دفصخدففددبعح1اخيفء1745بعبفحفحا15يحيحضخا0يضح1بصحيصدصصص11ي
在线转换器返回以下内容:
15دحفبخفسف081صفض0ف178سدصياس46سؤصصدبصدطعدعخ09اخدعصطخشدسبصصعفخب49دفصخدففد0دباحح1اخفاء10745بعصب0 0فححح15يحيحضخا0يضح1بصحيصدصصص11ي
我使用了以下配置:
char* inputData = (char*)malloc(sizeof(char) * 15);
char* outputData = (char*)malloc(sizeof(char) * 1024);
inputData = "Some Data";
unsigned int rate = 576;
unsigned int capacity = 1024;
unsigned char suffix = 0x06;
unsigned int hashLength = 64;
int spongeResult = KeccakWidth1600_Sponge(rate, capacity , inputData, sizeof(inputData)+1, suffix , outputData, hashLength);
完整的代码可以找到here。
打印值的代码是:
int i;
for(i = 0; i < hashLength; i++){
printf("%x", *(outputData + i) & 0xff);
}
我意识到在另一个哈希中有更多的零。所以,我的问题:我的代码有什么问题?
编辑:这是整个计划:
#include <stdio.h>
#include <stdlib.h>
#include "KeccakCodePackage/bin/generic64/libkeccak.a.headers/KeccakSpongeWidth1600.h"
void main(){
printf("%s\n", "Run Keccak Test");
char* inputData = (char*)malloc(sizeof(char) * 15);
char* outputData = (char*)malloc(sizeof(char) * 1024);
inputData = "Some Data";
unsigned int rate = 576;
unsigned int capacity = 1024;
unsigned char suffix = 0x06;
unsigned int hashLength = 64;
printf("%s", "Hash the following data: \n");
printf("%s\n", inputData);
int spongeResult = KeccakWidth1600_Sponge(rate, capacity , inputData, sizeof(inputData)+1, suffix , outputData, hashLength);
if(spongeResult == 1){
printf("%s", "Sponge was not successful\n");
}else{
printf("%s", "Sponge successful\n");
int i;
for(i = 0; i < hashLength; i++){
printf("%x", *(outputData + i) & 0xff);
}
}
printf("%s", "\nFinished Keccak test.\n");
}
问题在于您打印价值的方式。
int i;
for(i = 0; i < hashLength; i++){
printf("%x", *(outputData + i) & 0xff);
}
%x
格式将打印一个小于16的单个十六进制数字。您需要使用%02x
打印带有前导0的值。