将 OPENSSL SHA1() 函数的结果放入 ARRAY 中

发布于 2024-08-13 16:01:26 字数 758 浏览 3 评论 0原文

我正在开发一个项目,遇到一些问题。我进行了搜索,但找不到任何满意的答案。

我有一个由 0 和 1 组成的巨大文件。 我将 1024(我的块)位放入数组块中,然后应用在 openssl/sha.h 库中实现的 SHA1() 函数。

字符块[1024]; while((fgets(块,1024,fp))!=NULL)

我的意图是我的文件可以由相同的块组成,并且我想计算有多少块是相同的。

在我的数组块中获得 1024 位后,我应用:

unsigned char obuf[20];

SHA1(块,strlen(块),obuf); 函数来获取哈希函数的结果。

这里 SHA1 函数是如何工作的

unsigned char *SHA1(const unsigned char *d, unsigned long n,unsigned char *md);

之后我想将我的哈希函数结果存储在一个数组中。在我读取所有文件后,我将使用这个数组来比较是否有相同的哈希结果,这样我就可以开始我的项目了。但是我卡在这一点上。我无法将结果 obuf 放入数组中。

我试过 : 内存复制() 字符串复制() 或者只是 myarray[N][20]=obuf;等等,

如果您建议某种方式,我会很高兴谢谢。

所以最大的问题是找到有多少哈希值是唯一的?

i'm working on a project and i have some problems.I have searched but can not find any satisfied answer.

i have a huge file consists of 0 and 1s.
i'm getting 1024 (my chunk) bits into an array chunk and after that i apply SHA1() function which is implemented in openssl/sha.h library.

char chunk[1024];
while((fgets(chunk,1024,fp))!=NULL)

My intention is that my file can consist of same chunks and i want to count how many chunks are same.

After i get 1024 bits in my array chunk i apply :

unsigned char obuf[20];

SHA1(chunk,strlen(chunk), obuf);
function to get the result of the hash function.

here how SHA1 function works

unsigned char *SHA1(const unsigned char *d, unsigned long n,unsigned char *md);

after that i want to store my hash function result in an array.After i read all of my file, i'll use this array to compare if there are same hash results or not, by this way i can start my project.But i stuck in this point. i can not put the result obuf to an array.

i tried :
memcopy()
strcopy()
or just myarray[N][20]=obuf; etc.

if you suggest some way, i'll be happy thanks.

so the biggest problem is that finding the how many hashes are unique ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

毁虫ゝ 2024-08-20 16:01:26

首先,您说输入文件的块大小为 1024 - 但是这一行最多将从文件中读取 1023 个字符(它使用一个空格作为空终止符):(

char chunk[1024]; while((fgets(chunk,1024,fp))!=NULL)

我认为 fread 可能更接近您在这里尝试做的事情)

其次,您可以执行以下操作:

#define MAX_CHUNKS 1000

unsigned char chunk[1024];
unsigned char obuf[MAX_CHUNKS][20];
int chunk_n = 0;

while (fread(chunk, sizeof chunk, 1, fp) > 0 && chunk_n < MAX_CHUNKS)
{
    SHA1(chunk, sizeof chunk, obuf[chunk_n++]);
}

/* Now have chunk_n SHA1s stored in obuf[0] through obuf[chunk_n -1] */

Firstly, you say that your chunks of input file are of size 1024 - however this line will read at most 1023 characters from your file (it uses one space for the null terminator):

char chunk[1024]; while((fgets(chunk,1024,fp))!=NULL)

(I think fread might well be closer to what you're trying to do here)

Secondly, you can just do something like:

#define MAX_CHUNKS 1000

unsigned char chunk[1024];
unsigned char obuf[MAX_CHUNKS][20];
int chunk_n = 0;

while (fread(chunk, sizeof chunk, 1, fp) > 0 && chunk_n < MAX_CHUNKS)
{
    SHA1(chunk, sizeof chunk, obuf[chunk_n++]);
}

/* Now have chunk_n SHA1s stored in obuf[0] through obuf[chunk_n -1] */
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文