【发布时间】:2023-03-30 01:07:01
【问题描述】:
我编写了一个调用 OpenSSL SHA1 来生成摘要的 C 代码,但我生成的摘要不匹配。
#define MSG_SIZE 190
#include <stdio.h>
#include <string.h>
#include <openssl/sha.h>
void str2hex(char *str, unsigned char *hex, int len) {
int tt, ss;
char temp[5];
for (tt = 0, ss = 0; tt < len, ss < 2 * len; tt++, ss += 2) {
temp[0] = '0';
temp[1] = 'x';
temp[2] = str[ss];
temp[3] = str[ss + 1];
temp[4] = 0;
hex[tt] = strtol(temp, NULL, 0);
}
}
int main() {
unsigned char digest[MSG_SIZE],stringt[MSG_SIZE];
int i;
char *string = "df1300";
str2hex(string, stringt, MSG_SIZE);
SHA_CTX ctx;
SHA1_Init(&ctx);
SHA1_Update(&ctx, stringt, strlen(string)/2);
SHA1_Final(digest, &ctx);
printf("SHA1 digest\n");
for (i = 0; i < 16; i++)
printf("%02x", digest[i]);
printf("\n");
return 0;
}
我收到的输出是
SHA1 digest
0450c758f08f726ef77880a15118a237
但输出应该是(来自 NIST 的 SHAKE 测试向量):
daf289eea10de7fef76e085ad70a3bc6
如果有人可以查看我的代码并让我知道我哪里做错了,那将会很有帮助。
【问题讨论】:
标签: c openssl cryptography sha