在Linux中利用熵池 /dev/urandom 生成固定长度随机数

/dev/urandom是Linux内核中的熵池之一,用于生成随机数。本文介绍如何利用这一特性并通过一系列命令(如cat、md5sum等)生成指定长度的随机字符串。
部署运行你感兴趣的模型镜像

/dev/urandom 是一个内核熵池
在Linux内核中,熵池是环境噪声数据流的集合,被作为种子用于生成随机数。

以下命令Ubuntu或者Centos都已测试通过

cat /dev/urandom | head -1 | md5sum | head -c 6

head -1
是取前面一行的内容

md5sum
是转化为md5

head -c 6
是只取前六位字节,更改这个数值可以自定义长度

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

任务描述 本关任务:从Linux系统的设备文件/urandom获取随机数,通过命令观察随机数生成,掌握典型随机数生成方法。 相关知识 为了完成本关任务,您需要掌握: Linux系统的典型随机数生成方法; 设备文件/dev/urandom生成随机数的特点。 Linux系统随机数生成方式 生成随机数是安全软件中一项非常常见的任务。在许多情况下,加密密钥不是由用户提供的,而是在软件内部生成的,它们的随机性非常重要;否则,攻击者可以通过预测加密密钥,从而达到破坏加密目的。我们都知道,伪随机数发生器一般都需要种子作为输入,然后输出“随机的”比特序列,用什么作为种子呢?很多安全工作者会选择系统当前时间作为种子喂给伪随机数发生器,继而生成密钥,因为在他们看来,程序什么时候运行是不确定的,所以种子也是不确定的,所以生成的密钥随机性可以得到保证。 事实上,由于产生随机数是很多系统必须具备的基本功能,所以一般操作系统中都集成了生成随机数的功能组件,这些组件并不是简单地使用系统当前时间作为种子,而是从物理世界的不确定性来获得随机性。这些物理世界的不确定性包括键盘敲击间隔、鼠标移动、系统中断时间。例如,Linux操作系统通过以下函数获得物理世界的随机性: void add_keyboard_randomness(unsigned char scancode); void add_mouse_randomness(__u32 mouse_data); void add_interrupt_randomness(int irq); void add_blkdev_randomness(int major); 第一种方法add_keyboard_randomness(),使用按键之间的计时收集随机数; 第二种方法add_mouse_randomness(),使用鼠标移动和中断计时收集随机数; 第三种方法add_interrupt_randomness(),使用中断时间收集随机数。当然,并非所有中断都是随机性的良好来源。例如,计时器中断不是一个好的选择,因为它是可预测的。然而,磁盘中断是一种更好的措施。 第四种方法add_blkdev_randomness(),收集系统事件(如硬件中断、键盘输入、鼠标移动等)的随机性,以确保生成随机数具有足够的不确定性和不可预测性。 Linux系统随机数 Linux将从物理资源收集的随机数据存储到一个随机中,将中的数据视为“种子”,可以使用种子生成我们想要的任意多个伪随机数。然后使用两个设备文件(/dev/random和/dev/urandom)将随机数据转化为伪随机数。 文件内容显示命令cat cat命令用于显示文件内容,例如: cat output.bin cat output.bin | hexdump 十六进制数据查看命令hexdump hexdump [选项] [文件]... -n length 只格式化输入文件的前length个字节。 -C 输出规范的十六进制和ASCII码。 -b 单字节八进制显示。 -c 单字节字符显示。 -d 双字节十进制显示。 -o 双字节八进制显示。 -x 双字节十六进制显示。 -s 从偏移量开始输出。 -e 指定格式字符串,格式字符串包含在一对单引号中,格式字符串形如:'a/b "format1" "format2"'。 例如 hexdump -C a.txt //以十六进制形式显示文件a.txt的内容 文件内容显示命令head head命令用于显示文件开头的内容(指定行数或字节数),默认显示前10行。 -n: 输出的行数 例如: head -n 5 f1.txt //显示文件f1.txt的前5行 head -n 5 f1.txt > h1 //把文件f1.txt前5行写入新文件h1 -c: 输出的字节数 例如: head -c 10 f1.txt //显示文件f1.txt的前5个字节 head -c 10 f1.txt > h2 //把文件f1.txt前10个字节写入新文件h2 步骤要求 实验的工作目录是/data/workspace/myshixun。 1. 观察/dev/urandom的行为 查看当前由/dev/urandom产生的系统随机数,以十六进制形式显示随机数。 注意观察随机数变化,移动鼠标,观察鼠标移动对结果是否有影响。 # cat /dev/urandom | hexdump 2. 分析设备文件/dev/urandom生成的伪随机数质量 从设备文件/dev/urandom生成1 MB的伪随机数生成的伪随机数写入文件outUr.txt中。 使用工具 ent 对设备文件 /dev/urandom 生成的伪随机数进行质量分析,分析结果写入文件entUr.txt。描述分析结果,并判断生成的伪随机数质量是否良好。 分析结果形式如下图。 3. 从设备文件/dev/urandom生成流密码密钥 从设备文件/dev/urandom生成16字节(即128比特位)的伪随机数并写入文件keyUr.txt,请用正确的命令查看密钥。 注意:生成的这16字节伪随机数将作为第4关任务中流密码的密钥。 测试说明 平台会对你的操作进行测试。
11-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值