openssl随机数
在 OpenSSL 中,随机数生成是一个非常重要的任务,用于生成密码学中的随机数,密钥和初始化向量等。在开发应用程序时,保证随机数的质量和随机性非常关键,因为弱的随机数可能导致密码学的弱点,使得应用程序容易受到攻击。
在 OpenSSL 中,你可以使用以下函数来生成随机数:
一、RAND_bytes() 函数(推荐)
1.1 底层原理
-
系统随机性源: OpenSSL 首先会尝试获取系统提供的真随机数源,通常是操作系统的
/dev/random
或/dev/urandom
(在类 UNIX 系统中),或者是 Windows 的 CryptGenRandom 函数。这些源产生的数据是由系统硬件或操作系统的事件(例如用户的鼠标移动、键盘输入、硬件噪声等)产生的,具有高度的随机性。 -
熵池(Entropy Pool): OpenSSL 会维护一个称为熵池的数据结构,用于存储收集到的随机性源数据。这个熵池包含了足够的随机性数据,可以供 OpenSSL 的伪随机数生成器使用。