[英]HMAC SHA256 calculation on large file (using system call)
我有以下代碼來生成 SHA256 HMAC hash:
HMAC(EVP_sha256(), key, key_len, (const unsigned char *)data, strlen(data), digest, &digest_len);
但是,我想生成文件的 HMAC SHA256 hash。 請注意該文件是一個大文件(~80 MB),我需要使用系統調用而不是直接使用 shell 命令來執行此操作。
問候
如果你有一個大文件,那么你可以使用HMAC_Update()
和HMAC_Final()
。 這是一個快速而骯臟的例子:
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <ssl/hmac.h>
int main(int argc, char *argv[])
{
FILE *f;
uint8_t buf[1024];
HMAC_CTX *ctx;
size_t ret;
uint8_t key[8] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 };
uint8_t *md;
int md_len;
int i;
if (argc < 2) {
printf("Usage: %s [FILE]\n", argv[0]);
return 1;
}
f = fopen(argv[1], "r");
if (!f) {
printf("Could not open file\n");
return 1;
}
ctx = HMAC_CTX_new();
HMAC_Init_ex(ctx, key, 8, EVP_sha256(), NULL);
md = (uint8_t *) malloc(HMAC_size(ctx));
while (!feof(f)) {
ret = fread(buf, 1, sizeof(buf), f);
HMAC_Update(ctx, &buf[0], ret);
}
HMAC_Final(ctx, md, &md_len);
for (i = 0; i < md_len; i ++)
printf("%02X", md[i]);
printf("\n");
HMAC_CTX_free(ctx);
fclose(f);
return 0;
}
output:
$ ./hmac hmac
C477E7AA9EC9F0DD8C98F85B94A18BC954E0648BB0C7D302F5EDE3679A93A6E8
$
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.