gpt4 book ai didi

c - 设置 RAND_set_rand_method() 后 RAND_bytes 未调用?

转载 作者:行者123 更新时间:2023-11-30 14:37:59 28 4
gpt4 key购买 nike

即使我们使用本地函数设置 currentMethod.bytes 来生成随机数,RAND_bytes 也没有被调用。在我们设置RAND_set_rand_method(&cuurentMethod)之后。

这里我附加了链接[ https://github.com/openssl/openssl/blob/master/test/sm2_internal_test.c]我已经尝试过了。

int main()
{
unsigned char rand[16];
int ret;
RAND_METHOD *oldMethod,currentMethod,*temp;
oldMethod = RAND_get_rand_method();/*getting default method*/
currentMethod = *oldMethod;
currentMethod.bytes = local_function_rand;

if((ret = RAND_set_rand_method(&currentMethod))!= 1)
return 0;

/* Now we are printing both address of local_function_method_rand() and
temp->bytes , those address are same after getting. */

temp = RAND_get_rand_method();

/* after we are comparing with RAND_SSLeay() function , to find default or not*/

if((ret = RAND_bytes(rand,16)) != 1)
return 0;
return 1;
}

预期结果是我们的本地函数应该调用。另外,调用RAND_bytes()是否需要在Linux系统中设置fips模式?

最佳答案

清理并最小化测试程序并填写缺失的部分后:

#include <openssl/rand.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int local_function_rand(unsigned char *buf, int num) {
printf("in local_function_rand(); requested %d bytes\n", num);
memset(buf, 4, num); // RFC 1149.5 standard random number
return 1;
}

int main(void) {
unsigned char rand[16];
RAND_METHOD currentMethod = {.bytes = local_function_rand};
RAND_set_rand_method(&currentMethod);

if (RAND_bytes(rand, sizeof rand) != 1) {
return EXIT_FAILURE;
}

return 0;
}

并运行它(使用 OpenSSL 1.1.1):

$ gcc -Wall -Wextra rand.c -lcrypto
$ ./a.out
in local_function_rand(); requested 16 bytes

它按预期工作;用户提供的函数由 RAND_bytes() 调用。如果您从代码中得到不同的结果,则问题中未包含的部分可能存在问题。

关于c - 设置 RAND_set_rand_method() 后 RAND_bytes 未调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56901232/

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