【发布时间】:2016-05-26 16:03:01
【问题描述】:
我有一个 16MB 的文件。我想每次取 16 字节的数据块,使用 SHA256 对其进行散列,然后使用结果指向要散列的 16 字节块的下一个位置。
例如,
#include <openssl/aes.h>
#include <openssl/sha.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define BLOCKSIZE 1048576
#define SUBBLOCKSIZE 16
int main(void) {
SHA256_CTX ctx;
int SHA256_Init(SHA256_CTX *ctx);
u_int8_t results[32];
FILE *infile;
char buf[SUBBLOCKSIZE];
int bufsize = SUBBLOCKSIZE;
infile = fopen("sample.dat", "r");
int i = 0;
int n;
while (fread(buf, SUBBLOCKSIZE, 1, infile) != NULL) {
SHA256_Init(&ctx);
n = strlen(buf);
SHA256_Update(&ctx, (u_int8_t *)buf, n);
SHA256_Final(results, &ctx);
//fseek here.....
i++;
}
return 0;
}
在我的代码中,'results' 是 SHA256 的哈希结果。我想将其转换为 256 位数字并将其修改为 1024(或其他任意整数)。然后我使用结果作为 fseek 中的输入来定位到下一个文件指针。
我想知道如何将“结果”转换为 256 位数字?
【问题讨论】:
-
resulta[32]是你的 256 位数字。如果你想要它的十六进制表示,请使用SHA224_Data函数。 -
@MichaelWalz 所以我可以使用它吗?例如,int newloc = 结果 % 1024; ?
-
如果您想要一个 256 位的 数字(表示为普通数字,而不是数组),请准备好编写自己的一组用于长数学运算的函数并执行仅处理
results的计算。 -
当然不是。为什么要获得摘要模 1024 ?
-
@Luke,
int newloc = results % 1024;将无法使用,因为这里是moddingresults的地址
标签: c hash type-conversion