首页 > 其他分享 >random随机数的学习

random随机数的学习

时间:2023-04-23 09:33:43浏览次数:37  
标签:Linux random dev 生成 学习 随机数 urandom

Linux中的随机数知多少

原创 入门小站 入门小站 2023-04-21 22:26 发表于湖北 收录于合集#Linux766个 入门小站 分享运维技巧及10k+Stars的开源项目 237篇原创内容 公众号

【Linux250个常用命令速查手册】关注【入门小站】,后台回复 「1001」 自取。

Linux系统中,有两个重要的随机数产生软件模块,分别是/dev/random和/dev/urandom。

其中,/dev/random模块的随机数产生源是根据系统中已经发生的硬件活动(比如硬盘、鼠标、键盘等设备)的一些随机性信息进行混合熵池处理,并且当系统熵池中的可用随机熵位数不足时会阻塞等待系统硬件事件来累积更多的熵,再产生随机数。因此,/dev/random产生的是真随机数。

而/dev/urandom模块也是根据系统中硬件活动产生的一些随机性信息混合熵池处理,但是当熵池中的可用随机熵位数不足时会补充伪随机数,并产生随机数。因此,/dev/urandom产生的是伪随机数。

图片

为什么生成随机数至关重要?

计算机是机器并按照一组指令工作(这就是我们创建程序使它们工作的原因)。这就是为什么不可能让机器想出任何随机数的原因。

图片

为什么生成随机数如此重要?答案很简单。

安全问题

大多数加密算法都基于生成随机数,因为这些数字稍后将用于创建加密密钥。如果生成的数字在本质上不是完全随机的,就会使整个密码技术变得脆弱。

因为可以很容易地预测这些键。而这也是产生随机数最关键的原因。那么 Linux 如何应对这种情况呢?很简单,就是今天要讨论的话题。使用 /dev/random 和 /dev/random。

/dev/random 和 /dev/urandom 的使用

你猜对了。它们都用于生成随机数。它们都用于为内核的随机数生成器提供接口。随机数生成器会将来自外部源(包括设备驱动程序)的随机输入收集到熵池中。

但是两者之间存在巨大差异/dev/random/dev/urandom因为它们遵循不同的方法来生成随机数。

/dev/random 如何生成随机数

/dev/random 将仅返回熵池中的随机数,如果熵池为空或未表明足够的随机性,则将阻止``对 /dev/random 的读取。/dev/random``

使其成为生成高质量随机数的理想选择。

/dev/urandom 将如何生成随机数

random(unlimited random) 将使用熵池返回随机数,但如果熵池为空,它将使用 SHA、MD5 或任何其他算法生成数据。这意味着,与 不同/dev/random,它不会阻止读取,并且即使没有足够的随机性也会继续为您提供随机数。

到底选择哪一个?

Random 和 Urandom 是为特定用例制作的。Urandom当持续需要随机数且其随机性不太重要时,使用。

Random适用于安全性是首要问题的任务,因为如果随机性不符合标准,它将阻止读取。

需要注意的是,/dev/random相比于/dev/urandom安全性更高,但是当熵池中的可用随机熵位数较少时,可能导致访问/dev/random时卡死,而/dev/urandom因为产生的是伪随机数,因此在熵池中可用随机熵位数较少时,产生的随机数质量和安全性会受到影响。

使用 Urandom 生成随机密码

要使用 生成随机密码Urandom,您只需遵循给定的命令:

sudo < /dev/urandom tr -dc A-Za-z0-9 | head -c14; echo

在 Linux 中使用 Urandom 生成随机密码

在这里,tr 命令会让您过滤输出,/dev/urandom例如它会从A to Z,a to z和获取您的密码0 to 9

head 命令将生成 14 个字符的字符串(使用-c 14)。

加入我的星球一起学习Ansible自动化运维快速入门25个常用Shell脚本细讲,免费提问

图片

【Linux250个常用命令速查手册】关注【入门小站】,后台回复 「1001」 自取。

图片 入门小站 分享运维技巧及10k+Stars的开源项目 237篇原创内容 公众号 收录于合集 #Linux  766个 上一篇推荐八款Linux远程连接工具,非常实用下一篇Linux这款文件传输工具的替代品,牛逼了! 阅读 619         写下你的留言    

标签:Linux,random,dev,生成,学习,随机数,urandom
From: https://www.cnblogs.com/cherishthepresent/p/17345495.html

相关文章

  • mindspore-gpu-2.0.0-alpha版本学习笔记
    使用docker容器运行:sudodockerrun-it-v/home/devil/shareData/root/shareData --runtime=nvidia--gpusall --nameUbuntu_x86_64swr.cn-south-1.myhuaweicloud.com/mindspore/mindspore-gpu-cuda11.1:2.0.0-alpha /bin/bash   ===========================......
  • layui学习3(静态表格、表单元素)
    1.静态表格表格:<tableclass="layui-table"></table>属性:lay-even实现隔行换色效果lay-skin="属性值"【line(行边框风格)、row(列边框风格)、nob(无边框风格)】lay-size="属性值"【sm(小尺寸)、lg(大尺寸)】表格-页面元素-Layui(ilayuis.com)<!DOCTYPEht......
  • VBA学习笔记901_代码留存
    只是为了记录一些跑过的代码,尽量加上注释,但有些非常简单,只是为了以后快速熟悉代码结构条件选择`最基本If逻辑表达式Then'如果逻辑表达式为真,则执行这里的语句Endif`加强版If逻辑表达式Then'如果逻辑表达式为真,则执行这里的语句Else'否则(即逻辑表达......
  • R语言随机森林RandomForest、逻辑回归Logisitc预测心脏病数据和可视化分析|附代码数据
    全文链接:http://tecdat.cn/?p=22596最近我们被客户要求撰写关于预测心脏病的研究报告,包括一些图形和统计输出。本报告是对心脏研究的机器学习/数据科学调查分析。更具体地说,我们的目标是在心脏研究的数据集上建立一些预测模型,并建立探索性和建模方法。但什么是心脏研究?研究大纲......
  • 【学习笔记】长链剖分
    简述在常规树链剖分中把重儿子设成\(siz\)最大的儿子,这样从根跳重链时子树大小至少减半,因此只需要\(O(\logn)\)次即可到达任何节点。考虑把关键字由\(siz\)改成子树内最大的深度\(dep\),这样的剖分方法称为长链剖分。voiddfs1(intu,intfa,intd){dep[u]=d,mxdep......
  • 算法学习day03链表part01-203、707、206--待办
    //这块需求重新进行学习packageLeetCode.linkedlistpart01;publicclassListNode{//结点的值intval;//下一个结点ListNodenext;//节点的构造函数(无参)publicListNode(){}//节点的构造函数(有一个参数)publicLis......
  • 【pytorch】土堆pytorch教程学习(一)环境配置及安装
    管理虚拟环境不同的项目需要不同的环境,Anaconda集成的conda包可以创建不同的环境并进行隔离。打开AnacondaPromp,创建环境,其中pytorch为创建的环境名:condacreate-n虚拟环境名python=版本启动环境condaactivate虚拟环境名移除虚拟环境condaremove-n虚拟环境名......
  • 51单片机学习笔记 STC89C52RC (05)矩阵键盘和独立键盘(轻触开关)
    按键抖动,需要消抖 原理图来自清翔电子一、独立键盘模块1.可以直接获取 P3^0对应S2 P3^1对应S3 P3^2对应S4 P3^3对应S5 的电压当轻触开关按下时,电流会流向GND,此时这一路的电压为0V,松开轻触开关,又变为5V //第一种方法:单个I/O口检测控制#include<reg51.h>sbi......
  • 深度学习基础入门篇[六(1)]:模型调优:注意力机制[多头注意力、自注意力],正则化【L1、L2,D
    1.注意力机制在深度学习领域,模型往往需要接收和处理大量的数据,然而在特定的某个时刻,往往只有少部分的某些数据是重要的,这种情况就非常适合Attention机制发光发热。举个例子,图2展示了一个机器翻译的结果,在这个例子中,我们想将”whoareyou”翻译为”你是谁”,传统的模型处理方式是......
  • 深度学习--可视化、过拟合
    深度学习--可视化、过拟合cmd运行命令:python-evisdom.server用法:fromvisdomimportVisdomviz=Visdom()viz.line([0.],[0.],win='train_loss',opts=dict(title='trainloss'))viz.line([loss.item()],[global_step],win='train_loss',update=�......