ESP32 ESP-IDF 随机数生成器(RNG)详解
ESP32 ESP-IDF 随机数生成器RNG详解一、源码分享1、效果展示2、开发环境搭建3、源码分享二、RNG详解1、核心特性2、ESP-IDF 中的 API 使用3、函数详解4、示例代码5、重要注意事项6、 总结一、源码分享1、效果展示2、开发环境搭建参考我这篇博文VS Code 在线安装ESP-IDFESP32开发环境搭建详细教程3、源码分享/* * SPDX-FileCopyrightText: 2010-2022 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: CC0-1.0 */#includestdio.h#includefreertos/FreeRTOS.h#includefreertos/projdefs.h#includefreertos/task.h#includesys/time.h#includedriver/gpio.h#includedriver/ledc.h#includeesp_timer.h#includeesp_task_wdt.h#includeesp_adc/adc_cali.h#includeesp_adc/adc_oneshot.h#includeesp_log.h#includeesp_random.huint32_trng_get_random_num(void){returnesp_random();}intrng_get_random_range(intmin,intmax){returnesp_random()%(max-min1)min;}voidapp_main(void){while(1){printf(Random number: %ld\n,rng_get_random_num());printf(Random number range: %d\n,rng_get_random_range(1,100));vTaskDelay(pdTICKS_TO_MS(500));}}二、RNG详解ESP32 芯片内部集成了一个基于内部电磁噪声的真随机数发生器。这个 RNG 是 ESP32 的一个硬件特性用于生成难以预测的随机数序列。在 ESP-IDF 开发框架中可以通过特定的 API 来访问和使用这个硬件 RNG。1、核心特性熵源RNG 的核心是物理噪声源。ESP32 利用其内部电路如振荡器、放大器产生的热噪声或半导体噪声等物理现象作为熵源。这些现象本质上是随机的难以预测或重现。硬件加速随机数的生成过程主要由硬件完成不依赖于软件算法如伪随机数算法因此效率较高对 CPU 资源占用少。符合标准ESP-IDF 提供的 RNG 接口生成的随机数符合 NIST SP 800-90A/B/C 等相关标准的要求适用于加密、安全等场景。无需种子与软件伪随机数生成器不同硬件 RNG 不需要用户提供初始种子值。它依靠物理熵源自行启动和运行。2、ESP-IDF 中的 API 使用访问 ESP32 的硬件 RNG 主要通过以下函数#includeesp_random.h// 生成一个 32 位的随机数uint32_tesp_random(void);// 用随机字节填充缓冲区 buf (长度为 len 字节)voidesp_fill_random(void*buf,size_tlen);3、函数详解uint32_t esp_random(void)功能生成并返回一个 32 位4 字节的无符号随机整数。返回值一个在[0, UINT32_MAX]范围内的随机uint32_t值。使用场景当只需要一个或少量随机数时使用例如生成随机 ID、随机延时、简单的随机选择等。void esp_fill_random(void *buf, size_t len)功能用随机字节填充用户提供的一段内存缓冲区。参数buf: 指向要填充随机字节的内存缓冲区的指针。len: 需要填充的随机字节的长度以字节为单位。使用场景当需要生成大量随机数据时使用例如生成加密密钥、初始化向量、随机数令牌、填充安全通信协议的数据包等。4、示例代码#includestdio.h#includeesp_random.h#includeesp_system.h#includefreertos/FreeRTOS.h#includefreertos/projdefs.h#includefreertos/task.hvoidapp_main(void){// 示例 1: 生成单个随机数uint32_trand_numesp_random();printf(Random number: %u\n,rand_num);// 示例 2: 生成随机字节数组uint8_trandom_bytes[16];// 16字节缓冲区例如用于AES-128密钥esp_fill_random(random_bytes,sizeof(random_bytes));printf(Random bytes: );for(inti0;isizeof(random_bytes);i){printf(%02x ,random_bytes[i]);// 以十六进制打印每个字节}printf(\n);}5、重要注意事项安全性ESP32 的硬件 RNG 旨在提供密码学意义上的安全随机数。这意味着生成的随机数在计算上应该是不可预测的适合用于安全关键应用如生成密钥、初始化向量、挑战值等。不用于软件 PRNG 种子虽然理论上可以用esp_random()的结果作为软件伪随机数生成器的种子但通常不需要这么做。ESP-IDF 提供的标准库函数如rand()、srand()在内部已经使用了硬件 RNG 来增强其随机性具体实现可能因版本而异。直接使用esp_random()或esp_fill_random()通常是更高效和安全的选择。性能硬件 RNG 生成速度很快但并非无限速。在需要极高吞吐量随机数的极端场景下虽然这在嵌入式系统中很少见可能需要评估其性能是否满足要求。密钥派生虽然 RNG 生成的字节是随机的但直接将其作为密钥使用尤其是长度固定的密钥可能不够安全。最佳实践是将 RNG 的输出作为熵源输入到一个密钥派生函数中如 HKDF、PBKDF2 或 ESP-IDF 提供的esp_crypto_key_derivation相关函数来生成最终使用的密钥。KDF 可以提供额外的保护如密钥拉伸、添加盐值、上下文绑定等。6、 总结ESP32 的硬件 RNG 是 ESP-IDF 提供的一个强大且易于使用的功能用于生成高质量的随机数。通过esp_random()和esp_fill_random()这两个简单的 API开发者可以方便地获取随机数用于各种需要不可预测性的场景特别是安全相关的应用。使用时需注意其安全特性并遵循密钥管理等安全最佳实践。

相关新闻

【SLAM】鹿明、它石、IO、GenRobot:具身智能赛道里,谁在做产品,谁在卖铲子?

【SLAM】鹿明、它石、IO、GenRobot:具身智能赛道里,谁在做产品,谁在卖铲子?

鹿明、它石、IO、GenRobot:具身智能赛道里,谁在做产品,谁在卖铲子? 这两年,具身智能赛道越来越热。 表面上看,市场上出现了很多“机器人公司”;但如果把公司真正拆开看,会发现它们做…

2026/7/6 3:40:11 阅读更多 →
用Maixcam制作的HTTP推流

用Maixcam制作的HTTP推流

1. 整体架构 摄像头采集:camera.Camera持续读取图像帧。 工作线程:Server.stream_worker负责不断从摄像头获取最新图像并压缩为JPEG,通过事件通知主线程或HTTP请求。 Flask HTTP服务:提供/stream路由,返回一个multip…

2026/5/17 11:27:29 阅读更多 →
OpenClaw 在Windows下的安装

OpenClaw 在Windows下的安装

OpenClaw 在Windows下的安装 安装参考文件: ● 微信文章:《2 万字 Openclaw 最细部署指南,30分钟手把手教程!Openclaw完全指南第一篇》 ● OpenClaw中国社区 保姆级安装教程 ● 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百…

2026/7/3 5:26:10 阅读更多 →

最新新闻

远程协助软件推荐 远程协助软件哪个好

远程协助软件推荐 远程协助软件哪个好

日常帮亲友排查设备故障、异地处理工作难题,都需要靠谱的远程协助,便捷高效的远程协助能大幅降低跨设备、跨地域的操作成本。哪款远程协助软件体验比较呢?无界趣连2.0凭借轻量化设计与扎实的使用体验,成为个人日常远程协助的优选工…

2026/7/7 4:55:49 阅读更多 →
AD15 敷铜(Polygon Pour) 的完整操作,按步骤做即可,适合顶层/底层GND或电源敷铜。

AD15 敷铜(Polygon Pour) 的完整操作,按步骤做即可,适合顶层/底层GND或电源敷铜。

一、准备工作- 确保 板框(Board Shape) 已画好(机械层 Mechanical 1)。​- 布局、走线基本完成,DRC 先过一遍。​- 切换到要敷铜的层:底部层标签点 Top Layer(顶层) 或 Bottom Layer…

2026/7/7 4:55:49 阅读更多 →
NET 10:Oxigraph 的 FFI 桥接实践

NET 10:Oxigraph 的 FFI 桥接实践

架构概览┌──────────────────────────────────────────────────────────┐ │ .NET 应用层 │ │ ┌──────────┐ ┌────────────────…

2026/7/7 4:55:49 阅读更多 →
从静态限流到智能负载管理:Uber 如何治理大规模数据库过载

从静态限流到智能负载管理:Uber 如何治理大规模数据库过载

本文是对 How Uber Conquered Database Overload: The Journey from Static Rate-Limiting to Intelligent Load Management 的整理与翻译。 内容结构概览 本文会围绕 Uber 如何从静态限流走向智能负载管理展开,主要包括: 为什么 Uber 的数据库过载治理…

2026/7/7 4:47:48 阅读更多 →
Uber 如何用原生 gRPC 加速 OpenSearch:从 REST/JSON 瓶颈到搜索与写入性能优化

Uber 如何用原生 gRPC 加速 OpenSearch:从 REST/JSON 瓶颈到搜索与写入性能优化

本文是对 Accelerating Search and Inestion with High-Performance gRPC™ in OpenSearch™ 的整理与翻译。 内容结构概览 本文会围绕 Uber 如何在 OpenSearch 中引入原生 gRPC 传输层展开,主要包括: 为什么搜索系统在 Uber 几乎无处不在REST/JSON 在…

2026/7/7 4:47:48 阅读更多 →
CRM管理系统有哪些?2026年高性价比选型指南

CRM管理系统有哪些?2026年高性价比选型指南

很多企业在挑选 CRM 时,习惯先看每家的报价单,比完单价比折扣,最后选一个 "看起来最便宜" 的方案。但我们接触过的大量真实案例显示:约 60% 的企业在 CRM 上线后的第三年,实际支出会超出最初预算的 40% 以上…

2026/7/7 4:45:48 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集,从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高:流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广,是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
RAG+知识图谱混合检索与Graph RAG核心对比

RAG+知识图谱混合检索与Graph RAG核心对比

做企业RAG落地的团队,往往容易卡在一容易踩坑的选型难题: 当需求单纯靠向量RAG搞不定、单纯靠知识图谱也搞不定,必须同时依赖「文本语义理解 实体关系推理」时,到底是做「向量图谱混合检索」就够了,还是必须上「Grap…

2026/7/7 0:07:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻