如何在Linux中生成随机密码
我们可能已经注意到,当我们在某些上创建帐户时,我们将提供随机密码,或者需要在Bash中生成随机字符串。
我们如何在Linux上生成此随机数据(或者密码)?
这可以以多种方式完成。
生成随机密码方法
Linux具有在此将在此处使用随机数据的命令的强大方法。
日期命令打印出日期和时间。
正如我们所知道的那样,时间不断变化,所以我们使用这种更改的数据来创建随机密码。
因此,首先,让我们来看看日期命令的输出:
$date Thu Jun 28 15:56:02 IST 2012
符合+%s,它显示自1970年1月1日以来以来通过的总秒数:
$date +%s 1340879165
方法1
这两个命令都可以用作"MD5SUM"命令的输入,该命令创建128位校验和(我们知道此校验和看起来非常随机)。
$date | md5sum 746b59da100daa4137d91de95c052793
方法2.
管道符号,"|"用于链接命令,例如:左命令的输出成为右命令的输入。
和"日期+%s"的输出,
$date +%s | md5sum f751a65f32a1e0cf52c513a7cf23a451
方法3.
其中代替使用"MD5SUM","SHA256SUM"或者"SHA512SUM"也可用于生成256或者512位输出。
$date | sha256sum 3a96b9feb1e7d869ed98b101a2e5cc5169e9f8d348712c1fb56196f877e23b8e
$date +%s | sha512sum 4f2f1e1863c243fea1dd7082006256211b16d0cb747968cd03ab77abc8f2a01b5c0cac7d9ca078e73d2dadf41959ff9cd2b1b8373dec803ab5967f007b19a5aa
如我们所知,这些命令创建了相当大的输出,但是,有时可能需要固定长度输出(例如8个字符)。
Head命令将文件中的前几行(默认为10)打印出来。
但使用-c选项,它可用于显示前几个字符。
方法4.
因此,在上面的命令中,如果我们将输出进一步向"head -c 10"命令管道,那么它将仅生成10个字符的输出。
$date +%s | md5sum | head -c 10 ; echo c398d742c4
$date | sha256sum | head -c 8 ; echo d3b1b029
其中Echo命令用于输出后的返回。
否则,输出将自身添加到提示。
有一个文件/dev/urandom,提供了内核随机数生成器的接口,这意味着它可用于随机数生成。
此文件可以生成大量的随机字符。
在我们看到如何使用此文件之前,我们将看一下文本处理工具"tr"。
"tr"命令可用于将字符从一个范围转换为另一个范围(例如,从小写到大写)。
我们不会进入这个命令的很多细节,但只会用随机数生成所需的内容来限制自己。
"回声'你好世界'| TR A-Z A-Z"将在消息中将所有小字母转换为首都。
$echo 'Hello World' | tr a-z A-Z HELLO WORLD
"tr -cd a-z"将截断(-d选项,删除)除(-c选项,恭维)给定范围内的字母(a-z此处):
$echo 'Hello World' | tr -cd a-z; echo elloorld
其中H和W被删除,因为它们不属于A-Z范围。
方法5.
现在让我们恢复为生成随机数。
如果我们只需要字母表中的随机数,请使用"tr -cd [:Alpha:** </dev/urandom"。
但要小心,它将填充随机字母表的屏幕,直到按Ctrl + C。
(输入重定向符号,<在上面的命令中意味着文件/dev /随机是其左侧的命令的输入文件,这里将使用头命令以获得前几个字符。
$tr -cd [:alpha:] < /dev/urandom | head -c 15 ; echo QdUAwqfKrCBOnVG
方法6.
其中[:alpha:** 是字母表的预定义字符范围。
"TR -CD A-ZA-Z"也可用于相同的效果。
如果需要所有字母和数字,则使用[:Alnum:** (或者A或者A或者A-ZA-Z0-9或者α0-9)。
$tr -cd [:alnum:] < /dev/urandom | head -c 10 ; echo TRIJR4YTZC
方法7.
要包含所有字符,例如标点符号等,请使用:
$tr -cd [:alnum:][:punct:] < /dev/urandom | head -c 20 ; echo 8ejcWS{kk%`p~Zm5JNfC
方法8.
该输出可以进一步提供给MD5SUM或者SHA256SUM命令:
$tr -cd [:alnum:] < /dev/urandom | head -c 10 | md5sum | head -c 10; echo 805d13817e
方法9.
如果我们想要更多的密码随机性,或者如果要更多地使其复杂化一些,则可以使用随机数量作为输入到MD5SUM命令(而不是固定的10)。
$tr -cd [:alnum:] < /dev/urandom | head -c $(tr -cd 0-9 < /dev/urandom | head -c 1) | md5sum | head -c 10; echo d41d8cd98f
其中$()将结果替换为它的位置。 其中我们使用“ tr -cd 0-9 </dev/urandom | head -c 1“。因此,此命令向md5sum命令输入随机字符(少于10个)。