c++ - 如何使用 openssl/sha.h 对文本文件进行 SHA256 散列处理
问题描述
我正在尝试在我的系统上散列一个文件,而我的 C++ 代码中的散列是正确的长度,但它与我得到的散列不同$ echo -n file.txt | sha256sum
我试图混合我目前在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");
}
请原谅我正在尝试通过少量文档来学习如何使用它,而大多数人只是在尝试散列短字符串。
$ 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 < SHA256_DIGEST_LENGTH; i++)
printf("%02x", output[i]);
愚蠢的拉丁字母!
推荐阅读
- laravel - Gusle 运行 HTTP 请求失败
- javascript - 在 Promise 中解决 Promise
- algorithm - 使用 hashmap 作为计数器时的空间复杂度
- java - java中的连续音频流
- python - 获取单个图像的 Keras 模型中的每一层输出
- spring-boot - java.lang.IllegalStateException:无法读取类 org.springdoc.core.SwaggerUiConfigProperties 错误的元数据
- amazon-web-services - 使用 eksctl 删除 EKS 集群无法正常工作,需要手动删除 ManagedNodeGroups 等资源
- javascript - 为什么如果语句在 JavaScript 中重复时不起作用?
- javascript - 格子 - 无法运行 (python) 快速入门
- python - 如何在 Selenium 中通过它们的 innerText 定位元素 - Python