openssl3.2 - exp - 产生随机数

openssl3.2 - exp - 产生随机数

概述

要用到openssl产生的随机数, 查了资料.

如果用命令行产生随机数, 如下:

openssl rand -hex -num 6
48bfd3a64f54

单步跟进去, 看到主要就是调用了一个RAND_bytes(), 没其他了.
官方说, 这个函数不一定会成功, 所以一定要判断返回值是否为1.

看openssl实现可知, openssl可以产生任意长度的随机数.
在这里插入图片描述

不用特意初始化随机数, 只要将openssl默认的初始化函数都调用到就行. e.g. 程序入口处调用自己总的openssl初始化函数.

void mem_hook()
{
	int i_rc = 0;
	uint64_t u64_init_opt = 0;

	// 如果不需要检查openssl的内存泄漏, 就注释掉下面2行的内存分配函数的hook.
	// CRYPTO_get_mem_functions(&malloc_fn_org, &realloc_fn_org, &free_fn_org);
	// CRYPTO_set_mem_functions(my_CRYPTO_malloc, my_CRYPTO_realloc, my_CRYPTO_free);

	// openssl init all
	OPENSSL_INIT_SETTINGS* _ossl_init_setting = OPENSSL_INIT_new();

	u64_init_opt = OPENSSL_INIT_LOAD_CRYPTO_STRINGS |
		OPENSSL_INIT_ADD_ALL_CIPHERS |
		OPENSSL_INIT_ADD_ALL_DIGESTS |
		OPENSSL_INIT_LOAD_CONFIG |
		OPENSSL_INIT_ASYNC |
		OPENSSL_INIT_NO_ATEXIT;

	// 将openssl库中的静态初始化函数显势调用一下, 免得在我们手工调用API时(因为有些openssl对象或变量没初始化)自动调用静态初始化函数引起多余的非我们应用产生的内存分配
	// 初始化函数在应用中只能调用一次.
	i_rc = OPENSSL_init_crypto(u64_init_opt, _ossl_init_setting);
	assert(1 == i_rc);
}

笔记

void my_openssl_app()
{
	UCHAR szBuf[16*2 - 3];
	int i_rc = 0;

	i_rc = RAND_bytes(szBuf, (int)sizeof(szBuf)); // 产生随机数, 就这一句.
	assert(1 == i_rc); // 一定要判断返回值是否为1(官方文档这么说)

	BIO_dump_fp(stdout, szBuf, sizeof(szBuf));

	/*! run result
	0000 - b8 8c c7 76 12 fb 41 e8-5b 6a 7d f0 9e 45 26 8a   ...v..A.[j}..E&.
	0010 - 43 f8 9f 8e ef e8 49 43-d0 db 8b 87 30            C.....IC....0
	free map, g_mem_hook_map.size() = 0
*/
}

END

相关推荐

  1. openssl3.2 - exp - RAND_bytes_ex

    2024-03-12 23:06:03       47 阅读
  2. C++怎样产生随机数

    2024-03-12 23:06:03       36 阅读
  3. openssl+EVP详解

    2024-03-12 23:06:03       43 阅读
  4. openssl3.2 - exp - get openssl version info

    2024-03-12 23:06:03       31 阅读
  5. openssl3.2 - exp - PEM <==> DER

    2024-03-12 23:06:03       50 阅读
  6. openssl3.2 - exp - AES-256-GCM

    2024-03-12 23:06:03       28 阅读
  7. openssl3.2 - exp - generate prime

    2024-03-12 23:06:03       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-12 23:06:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-12 23:06:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-12 23:06:03       82 阅读
  4. Python语言-面向对象

    2024-03-12 23:06:03       91 阅读

热门阅读

  1. leetcode - 953. Verifying an Alien Dictionary

    2024-03-12 23:06:03       41 阅读
  2. 使用hashmap优化时间复杂度,leetcode1577

    2024-03-12 23:06:03       46 阅读
  3. 计算机等级考试:信息安全技术 知识点六

    2024-03-12 23:06:03       43 阅读
  4. 【Go】探索Go语言中的关于defer的应用

    2024-03-12 23:06:03       45 阅读
  5. VSCode无法用ctrl+鼠标滚轮调整字体大小了

    2024-03-12 23:06:03       37 阅读
  6. python中的幂运算

    2024-03-12 23:06:03       40 阅读
  7. Python sort从大到小排序面试题

    2024-03-12 23:06:03       36 阅读
  8. Spring Data的Repositories----自定义存储库实现

    2024-03-12 23:06:03       38 阅读
  9. SpringBoot-WEB相关

    2024-03-12 23:06:03       37 阅读