gpt4 book ai didi

c - rnd数据摘要问题

转载 作者:行者123 更新时间:2023-11-30 17:57:34 24 4
gpt4 key购买 nike

我尝试生成一个大文件进行摘要。当我在下面使用 openssl rand 8096 | head -c 8096 > rnddata,没问题。

./hash_test sha1
摘要为:a0a4dab4a16d247fb625ca2abf07373d2123e4a5
openssl dgst -sha1 rnddata
SHA1(rnddata)= a0a4dab4a16d247fb625ca2abf07373d2123e4a5

但是当 rnddata 的大小等于或大于 9000 时,摘要结果会有所不同。

openssl 兰特 9000 | head -c 9000 > rnddata
openssl dgst -sha1 rnddata
SHA1(rnddata)= 4ef5b73ee39f0f2ac6d341c55467c182786cab65
./hash_test sha1
摘要为:691747a97aee32ddf04b3bf5644b5d74c4b69657

下面是我的测试用c代码

#include <stdio.h>
#include <openssl/evp.h>

main(int argc, char *argv[])
{
EVP_MD_CTX mdctx;
const EVP_MD *md;
FILE *fr;
size_t bytes;
char mystring[32];

fr = fopen("/home/root/rnddata", "r");
if(fr == NULL)
printf("Error opening file\n");

unsigned char md_value[EVP_MAX_MD_SIZE];
int md_len, i;

OpenSSL_add_all_digests();
//OpenSSL_add_all_algorithms();
if(!argv[1]) {
printf("Usage: mdtest digestname\n");
exit(1);
}

//md = EVP_get_digestbyname(argv[1]);
md = EVP_sha1();
if(!md) {
printf("Unknown message digest %s\n", argv[1]);
exit(1);
}

EVP_MD_CTX_init(&mdctx);
EVP_DigestInit_ex(&mdctx, md, NULL);
while ((bytes = fread (mystring, 1, 32, fr)) != 0)
EVP_DigestUpdate(&mdctx, mystring, bytes);
EVP_DigestFinal_ex(&mdctx, md_value, &md_len);
EVP_MD_CTX_cleanup(&mdctx);

printf("Digest is: ");
for(i = 0; i < md_len; i++)
printf("%02x", md_value[i]);
printf("\n");
fclose(fr);
}

感谢任何帮助。

最佳答案

我已经测试了这两个代码以及命令行。以下是我的测试结果。

root@am335x-evm:~# openssl rand 9000 | head -c 9000 > rnddata
root@am335x-evm:~# ./hash_test sha1
Digest is: 691747a97aee32ddf04b3bf5644b5d74c4b69657
root@am335x-evm:~# ./sha1_test
691747a97aee32ddf04b3bf5644b5d74c4b69657 rnddata
root@am335x-evm:~# openssl dgst -sha1 rnddata
SHA1(rnddata)= 4ef5b73ee39f0f2ac6d341c55467c182786cab65

关于c - rnd数据摘要问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12731747/

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