首页 > 系统相关 >Linux 中的 /dev/random 和 /dev/urandom 是什么?

Linux 中的 /dev/random 和 /dev/urandom 是什么?

时间:2023-09-12 18:32:03浏览次数:39  
标签:10 random dev 生成 随机数 urandom

在Linux系统中,/dev/random和/dev/urandom是两个特殊的设备文件,用于生成随机数。在本文中,我们将深入探讨这两个设备文件的区别,以及它们在Linux系统中的作用。

/dev/random

/dev/random是一个随机数生成器设备文件,用于生成高质量的随机数。它通过收集系统上的环境噪声(例如硬件噪声,磁盘活动等)来产生随机数。由于它只在系统上有足够的环境噪声时才能生成随机数,因此/dev/random生成的随机数是高质量的。

但是,/dev/random的主要缺点是,如果系统上的环境噪声不足,则会导致生成随机数的速度变慢,有时甚至会完全停止。这可能会导致某些应用程序无法正常工作,因为它们需要大量的随机数。

/dev/urandom

与/dev/random不同,/dev/urandom是一个伪随机数生成器设备文件,它通过使用内部熵池来生成随机数。它会持续生成随机数,无论系统上的环境噪声有多少。因此,/dev/urandom生成的随机数速度比/dev/random快得多。

由于/dev/urandom使用的是伪随机数生成算法,因此在某些情况下,可能会产生较低质量的随机数。例如,在系统启动时,内部熵池可能不够大,因此生成的随机数可能不够随机。但是,在系统运行一段时间后,熵池会变得更大,并且生成的随机数的质量也会提高。

如何使用 /dev/random 和 /dev/urandom

在Linux系统中,可以通过读取/dev/random或/dev/urandom来获取随机数。例如,以下命令将生成10个随机字节并将它们输出到标准输出:

$ head -c 10 /dev/random

类似地,以下命令将生成10个伪随机字节并将它们输出到标准输出:

$ head -c 10 /dev/urandom

请注意,这些命令将生成二进制随机数据。如果您需要生成可读的随机数据,请使用以下命令:

$ head -c 10 /dev/random | base64
$ head -c 10 /dev/urandom | base64

这将生成10个随机字节并将它们转换为Base64编码,以便更容易阅读和使用。

总结

在Linux系统中,/dev/random 和 /dev/urandom 是用于生成随机数的特殊文件。 /dev/random 和 /dev/urandom 都使用熵池来生成随机数,但它们的行为方式有所不同。/dev/random 会在熵池中的熵低于一定值时阻塞等待熵的增加,而 /dev/urandom 不会阻塞等待熵,而是使用伪随机数生成器来生成随机数。

在选择 /dev/random 或 /dev/urandom 时,需要权衡随机数的安全性和性能。一般来说,对于需要高安全性的场景,建议使用 /dev/random;对于需要高性能的场景,建议使用 /dev/urandom。但是,实际上,大多数情况下,/dev/urandom 的安全性也足够,并且速度更快。

总之,了解 /dev/random 和 /dev/urandom 的行为方式和使用场景对于编写安全和高效的程序非常重要。

标签:10,random,dev,生成,随机数,urandom
From: https://blog.51cto.com/wljslmz/7447296

相关文章

  • 新增device模块
    1新建模块默认目录结构如下: 2创建菜单创建一级目录:  创建二级目录: 3自动代码生成  生成代码目录如下:4前台代码生成的前台代码js部分放入ruoyi-ui下面的api目录。 vue部分代码放入views目录:5后台代码后台的controller代码放到ruoyi-admin目录......
  • web DevOps / qemu / kvm nat / kvm network / danei network
    s[root@eulershare]#rpm-qa|grepopenssh#查看sshopenssh-8.8p1-21.oe2203sp2.x86_64openssh-server-8.8p1-21.oe2203sp2.x86_64openssh-clients-8.8p1-21.oe2203sp2.x86_64openssh-askpass-8.8p1-21.oe2203sp2.x86_64[root@eulershare]#pgrep-l......
  • 【玩转鲲鹏 DevKit系列】如何快速迁移无源码应用?
    本文分享自华为云社区《【玩转鲲鹏DevKit系列】如何快速迁移无源码应用?》,作者:华为云社区精选。为了帮助广大用户和开发者快速将无源码应用从x86迁移到鲲鹏,鲲鹏DevKit提供了动态二进制翻译工具ExaGear,它能在运行时将x86二进制指令翻译成鲲鹏二进制指令,使得大部分x86应用无需......
  • web DevOps / engineer day04 /
    s今日总结:环境构建构建Yum仓库开机自动挂载修改UUID内容配置网络参数之主机名配置网络参数之IP地址与子网掩码、网关地址三种方式配置地址:nmcli方式利用nmtui修改IP地址、子网掩码、网关地址(了解)利用配置文件修改IP地址、子网掩码、网关地址(了解)总结(图-15)克隆虚拟机(......
  • 界面控件DevExtreme DateRangeBox组件发布,支持日期范围选择!
    在最新的v23.1版本中,DevExpress官方已经正式发布了DevExtreme DateRangeBox小部件,支持所有JavaScript框架,包括Angular、React、Vue和jQuery。这个新的控件允许最终用户选择一个日期范围,该组件继承了DateBox组件的特性:屏蔽输入、灵活的弹出窗口和日历自定义、输入标签/样式模式等......
  • Linux 中的 /dev/null 是什么?有什么隐藏的作用?
    在Linux系统中,/dev/null是一个特殊的文件,它被称为“空设备”。它没有任何数据,读取它永远不会产生任何输出,写入它永远不会导致任何数据被存储。/dev/null起着丢弃数据的作用,可以用于一些需要忽略输出或者输入的场合。在本文中,我们将会深入了解/dev/null文件,它的作用以及如何......
  • python中numpy.random.seed设置随机种子是否影响子进程
    给出代码:frommultiprocessingimportProcessimportnumpyasnpclassNN(Process):def__init__(self,id):super(NN,self).__init__()self.id=iddefrun(self):super(NN,self).run()print(np.random.random(5))......
  • Burp Suite Extension Development Guide
    BurpSuite是什么?BurpSuite是一款Web应用程序渗透测试工具,可以帮助用户发现和利用Web应用程序中的漏洞,提高渗透测试的效率和精度。Web应用程序最常用的传输数据的协议就是HTTP/HTTPS,所以我们将从HTTP协议的数据格式开始介绍。HTTP/HTTPS协议内容简要划分Burp中最为核心的对象......
  • 破局DevOps|8大北极星指标指引研发效能方向
    放弃那些动辄就上百个的研发度量指标吧,8大北极星指标指引你的研发效能方向,1个北极星指标公式让你清晰了解​公司研发效能现状。每当研发效能/DevOps业务做规划的时候,有的人就会毫无头绪,不知道如何下手,不知道方向在哪里,价值怎么衡量。本文将介绍如何借助北极星指标这个工具来帮我......
  • monkey解决adb devices识别不到夜神模拟器问题
    一、输入命令检测不到,确认夜神模拟器是否开启了调试模式 二、如果夜神模拟器已经打开调试模式了,但使用adbdevices还是找不到设备,可以输入adbconnect127.0.0.1:62001连接上夜神模拟器(62001为夜神模拟器的端口号)。但此方法只适用当前会话,想要从根本上解决见下面方法。三、sdk......