当前位置: 首页 > news >正文

【 开发知识点 一 】 随机数生成器 /dev/urandom 和 /dev/random

文章目录

  • 一、随机数生成器 是什么 ?
  • 二、为什么 需要 随机数生成器 ?
  • 三、随机数生成器 基本原理
  • 四、随机数生成器 三个输出接口
  • 五、随机生成器 应用
    • 1、简单应用
    • 2、项目应用


一、随机数生成器 是什么 ?

/dev/random/dev/urandom 是 Linux 上的字符设备文件,它们是随机数生成器,为系统提供随机数。


二、为什么 需要 随机数生成器 ?

随机数在计算中很重要。 TCP/IP 序列号、密码和 DNS 源端口号都依赖于随机数。

在密码学中,随机性无处不在,从密钥的生成到加密系统,甚至密码系统受到攻击的方式。没有随机性,所有加密操作都是可预测的,因此不安全。


三、随机数生成器 基本原理

为了尽可能的做到随机,随机数生成器会收集系统环境中各种数据,比如:鼠标的移动,键盘的输入, 终端的连接以及断开,音视频的播放,系统中断,内存 CPU 的使用等等。

生成器把收集到的各种环境数据放入一个池子 ( 熵池 ) 中,然后将这些数据进行去偏移等,主要目的也是使得数据更加无序,更加难以猜测或者预料得到

有了大量的环境数据之后,每次获取随机数时,从池子中读取指定的字节序列,这些字节序列就是生成器生成的随机数

  • 收集器

收集器收集系统中的环境噪音,比如:鼠标、键盘、中断事件、内存、CPU等,收集之后进行批量偏移等操作,之后进入主熵池中

  • 主熵池

主熵池接收收集器传递过来的环境数据,大小为 512字节( 4098二进制位) , 它为 次熵池(random 熵池) 和 urandom 熵池提供随机数

在 Linux上,可以通过下面的命令查看当前系统主熵池大小, 单位是 二进制位的数量

cat /proc/sys/kernel/random/poolsize
  • 次熵池

/dev/random 设备关连的,大小为128字节,它是阻塞的

  • urandom 熵池

和 /dev/urandom 设备关连的,大小为128字节,它是非阻塞的

  • 计数器

主熵池 、次熵池 以及 urandom 熵池各自都有一个计数器,用一个整数值来记录,表示当前熵池中可用随机数的数量,这是一个预估的值,它是生成器根据熵池中的环境数据估算出来的

当熵池中有新的随机数加入时,对应熵池的计数器计数会增加,当熵池中随机数被取出时,熵池计数器计数减少


http://www.lryc.cn/news/545600.html

相关文章:

  • LabVIEW虚拟弗兰克赫兹实验仪
  • LLC谐振变换器恒压恒流双竞争闭环simulink仿真
  • TVbox蜂蜜影视:智能电视观影新选择,简洁界面与强大功能兼具
  • Python 绘制迷宫游戏,自带最优解路线
  • vue3学习-1(基础)
  • deepseek使用记录18——文化基因之文化融合
  • Hadoop简介
  • 密码学(哈希函数)
  • 谈谈单例模式中通过Htools包的SpringUtil.getBean获取Bean的好处
  • 本地部署大语言模型-DeepSeek
  • adb的安装
  • Python 如何实现 Markdown 记账记录转 Excel 存储
  • 随机播放音乐 伪随机
  • latex 环境配置
  • fortify安全扫描Access Control: Database问题解决
  • Java 设计模式:软件开发的精髓与艺
  • 初学者如何用 Python 写第一个爬虫?
  • Cocos Creator3.8.6拖拽物体的几种方式
  • 分布式Session
  • Kotlin 运算符重载
  • OpenHarmony4.1-轻量与小型系统ubuntu开发环境
  • AVR 单片机硬件供电处理
  • LeetCode 27 移除元素
  • 对“预训练”的理解
  • 论文阅读:CAN GENERATIVE LARGE LANGUAGE MODELS PERFORM ASR ERROR CORRECTION?
  • Stable Diffusion(SD)系列模型及关联算法深度解析
  • FPGA开发,使用Deepseek V3还是R1(3):系统级与RTL级
  • logback日志输出配置范例
  • 【开源免费】基于SpringBoot+Vue.JS酒店管理系统(JAVA毕业设计)
  • Unity中动态切换光照贴图LightProbe的方法