gpt4 book ai didi

C++ Tweetnacl 散列文件而不将整个文件读入内存

转载 作者:太空宇宙 更新时间:2023-11-04 01:00:58 25 4
gpt4 key购买 nike

我正在使用 tweetnacl 生成字符串和文件的 sha512 哈希值。对于字符串,它工作得很好,但我不知道如何处理文件。

函数的签名是

extern "C" int crypto_hash(u8 *out, const u8 *m, u64 n);

其中 u8 是 unsigned char 类型,u64 是 unsigend long long。对于字符串 a 可以这样使用它

string s("Hello");
unsigned char h[64];

crypto_hash(h, (unsigned char *)s.c_str(), s.size());

这对字符串和小文件非常有效,但如果我想为大文件创建哈希,它不可行并且会占用大量内存。我正在寻找一种解决方案来逐字节读取文件并将其作为 unsigend char 指针传递给该函数。有人知道如何实现吗?

P.S 抱歉英语不好。p.s.s 我使用 tweetnacl 因为体积小,我只需要散列函数。

最佳答案

可能最简单的方法是使用 memory-mapped file .这使您可以打开一个文件并将其映射到虚拟内存中,然后您可以像对待内存中一样对待磁盘上的文件,操作系统将根据需要加载页面。

因此,在您的情况下,打开您的文件并使用 mmap() 将其映射到内存中。然后您可以将指针传递给您的 crypto_hash() 函数并让操作系统完成工作。

请注意,关于文件的大小与虚拟内存有关的注意事项。

对于各种平台:

关于C++ Tweetnacl 散列文件而不将整个文件读入内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39997400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com