如何使用openssl/sha.h将文本文件分块散列 我试图在我的系统上散列文件,我的C++代码中的散列是正确的长度,但是它是一个不同的哈希,我在代码< > $CHOR-N文件。

如何使用openssl/sha.h将文本文件分块散列 我试图在我的系统上散列文件,我的C++代码中的散列是正确的长度,但是它是一个不同的哈希,我在代码< > $CHOR-N文件。,c++,io,sha256,C++,Io,Sha256,我已经尝试实现了一个到目前为止我在stackoverflow上看到的混合,最终得到了一些几乎可以工作的东西 void sha256_file(const std::string &fn) { FILE *file; unsigned char buf[8192]; unsigned char output[SHA256_DIGEST_LENGTH]; size_t len; SHA256_CTX sha256; file

我已经尝试实现了一个到目前为止我在stackoverflow上看到的混合,最终得到了一些几乎可以工作的东西

void sha256_file(const std::string &fn)
{
     FILE *file;

     unsigned char buf[8192];
     unsigned char output[SHA256_DIGEST_LENGTH];
     size_t len;

     SHA256_CTX sha256;

     file = fopen(fn.c_str(), "rb");

     if(file == NULL)
           // do whatever
     else
     {
          SHA256_Init(&sha256);
          while((len = fread(buf, 1, sizeof buf, file)) != 0)
               SHA256_Update(&sha256, buf, len);
          fclose(file);
          SHA256_Final(output, &sha256);

          for(int i = 0; i < SHA256_DIGEST_LENGTH; i++)
                printf("%02x", output[1]);
          printf("\n");
     }
void sha256_文件(const std::string&fn)
{
文件*文件;
无符号字符buf[8192];
无符号字符输出[SHA256_摘要_长度];
尺寸透镜;
SHA256_CTX SHA256;
file=fopen(fn.c_str(),“rb”);
if(file==NULL)
//做任何事
其他的
{
SHA256_Init(&SHA256);
而((len=fread(buf,1,sizeof buf,file))!=0)
SHA256_更新(&SHA256,buf,len);
fclose(文件);
SHA256_最终(输出和SHA256);
对于(int i=0;i
请原谅,我正在尝试学习如何使用这个小文档,大多数人只是试图散列短字符串


$echo-n file.txt | sha256sum
是我用来检查散列的,但是输出是不同的。我会复制粘贴,但它在另一个系统上。

很简单,你在打印循环中执行了
[1]
而不是
[I]

      for(int i = 0; i < SHA256_DIGEST_LENGTH; i++)
            printf("%02x", output[1]);
for(int i=0;i
应该是

      for(int i = 0; i < SHA256_DIGEST_LENGTH; i++)
            printf("%02x", output[i]);
for(int i=0;i

愚蠢的拉丁字母表!

echo-n file.txt | sha256sum
实际上是将文本
“file.txt”
传递给
sha256sum
而不是
file.txt
的内容。如果这是你想要的,那很好,但是如果你试图对内容进行哈希,你就没有完全做到。这就是那种“Doah…”瞬间…用敏锐的目光从混乱的代码中挑选出
'1'
'i'
。干得好。