openssl3.2 - exp - 产生随机数

文章目录

    • [openssl3.2 - exp - 产生随机数](#openssl3.2 - exp - 产生随机数)
    • 概述
    • 笔记
    • END

openssl3.2 - exp - 产生随机数

概述

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

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

bash 复制代码
openssl rand -hex -num 6
48bfd3a64f54

单步跟进去, 看到主要就是调用了一个RAND_bytes(), 没其他了.

官方说, 这个函数不一定会成功, 所以一定要判断返回值是否为1.

看openssl实现可知, openssl可以产生任意长度的随机数.

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

c 复制代码
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);
}

笔记

c 复制代码
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

相关推荐
洋哥网络科技3 天前
openssl升级
openssl
Lazy Dave18 天前
gmssl私钥文件格式
网络安全·ssl·openssl
沉在嵌入式的鱼1 个月前
RK3588移植Openssl库
linux·rk3588·openssl
黑屋里的马1 个月前
ssl相关命令生成证书
服务器·网络·ssl·openssl·gmssl
fangeqin2 个月前
ubuntu源码安装python3.13遇到Could not build the ssl module!解决方法
linux·python·ubuntu·openssl
API开发2 个月前
苹果芯片macOS安装版Homebrew(亲测) ,一键安装node、python、vscode等,比绿色软件还干净、无污染
vscode·python·docker·nodejs·openssl·brew·homebrew
码农不惑2 个月前
Rust使用tokio(二)HTTPS相关
https·rust·web·openssl
liulilittle2 个月前
通过高级处理器硬件指令集AES-NI实现AES-256-CFB算法并通过OPENSSL加密验证算法正确性。
linux·服务器·c++·算法·安全·加密·openssl
liulilittle2 个月前
OpenSSL 的 AES-NI 支持机制
linux·运维·服务器·算法·加密·openssl·解密
liulilittle2 个月前
通过高级处理器硬件指令集AES-NI实现AES-256-CFB算法。
linux·服务器·c++·算法·安全·加密·openssl