【问题标题】:convert sha 256 hash to number in c将sha 256哈希转换为c中的数字
【发布时间】: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; 将无法使用,因为这里是 modding results地址

标签: c hash type-conversion


【解决方案1】:

直接的答案是使用处理大整数的库。对于 C the OpenSSL BN_ functions 对大数字执行操作,仅举一个显而易见的例子。

不那么直接的答案是简单地使用结果数组的 256 位/32 字节中的 64 位/8 字节(最左边)位并将其放入 64 位“长”数(int64_t 可能是最好的)。然后,您可以使用 % 运算符简单地检索该值的模 x

请注意,结果没有很好地分布在x 不是二的幂的限制上。在这种情况下,您可能需要丢弃任何等于或大于x * n 的数字r,其中nx * n 仍适合64 位的最大值。如果您不丢弃这些值,那么您有一个(微小)更高的机会,结果将是一个较低的值。

当然,如果您的结果恰好是 2 的幂 p,那么您不妨取 p(最左边的)位并将这些位解释为大小相同或更大的无符号整数。

【讨论】:

  • 我阅读了 BN 文档,只发现了从 BN 到其他格式的转换,例如 BN_bn2bin()。有没有可以将字节转换为BN的函数?
  • BN_bin2bn 怎么样(是的,OpenSSL API 文档很烂,它甚至在我的个人资料页面上都这么说)。
  • 请注意,以上内容不包含任何其他加密建议。例如,SHA-256 没有 cycles,其中输出与先前的输入相同。您的计划当然不是这种情况;完全有可能重新生成相同的位置并进入无限循环。为避免这种情况,您可以改用排序算法(使用伪随机数生成器)。由于我不知道用例,我无法对此发表评论。
猜你喜欢
  • 2015-08-21
  • 2014-08-29
  • 2014-08-19
  • 2011-04-23
  • 2023-03-18
  • 2013-01-09
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多