45

cat /dev/urandom在显示器上创建滚动字符始终是一种有趣的方式,但会产生太多不可打印的字符。

有没有一种简单的方法可以在命令行上对其进行编码,使其所有输出都是可读字符,例如 base64 或 uuencode。

请注意,我更喜欢不需要创建额外文件的解决方案。

4

7 回答 7

68

怎么样的东西

cat /dev/urandom | base64

这给出了(很多)类似的东西

hX6VYoTG6n+suzKhPl35rI+Bsef8FwVKDYlzEJ2i5HLKa38SLLrE9bW9jViSR1PJGsDmNOEgWu+6
HdYm9SsRDcvDlZAdMXAiHBmq6BZXnj0w87YbdMnB0e2fyUY6ZkiHw+A0oNWCnJLME9/6vJUGsnPL
TEw4YI0fX5ZUvItt0skSSmI5EhaZn09gWEBKRjXVoGCOWVlXbOURkOcbemhsF1pGsRE2WKiOSvsr
Xj/5swkAA5csea1TW5mQ1qe7GBls6QBYapkxEMmJxXvatxFWjHVT3lKV0YVR3SI2CxOBePUgWxiL
ZkQccl+PGBWmkD7vW62bu1Lkp8edf7R/E653pi+e4WjLkN2wKl1uBbRroFsT71NzNBalvR/ZkFaa
2I04koI49ijYuqNojN5PoutNAVijyJDA9xMn1Z5UTdUB7LNerWiU64fUl+cgCC1g+nU2IOH7MEbv
gT0Mr5V+XAeLJUJSkFmxqg75U+mnUkpFF2dJiWivjvnuFO+khdjbVYNMD11n4fCQvN9AywzH23uo
03iOY1uv27ENeBfieFxiRwFfEkPDgTyIL3W6zgL0MEvxetk5kc0EJTlhvin7PwD/BtosN2dlfPvw
cjTKbdf43fru+WnFknH4cQq1LzN/foZqp+4FmoLjCvda21+Ckediz5mOhl0Gzuof8AuDFvReF5OU

或者,没有(无用的) cat+pipe :

base64 /dev/urandom

(同样的输出^^)


编辑:您还可以使用 , 的--wrap选项base64以避免出现“短线”:

base64 --wrap=0 /dev/urandom

这将删除包装,您将获得“全屏”显示^^

于 2009-08-08T23:36:45.743 回答
22

许多人建议通过or进行catting 和管道化。这样做的一个问题是您无法控制要读取的数据量(它将永远持续下去,或者直到您按下 ctrl+c)。另一种可能性是使用该命令,它可以让您指定在退出之前要读取多少数据。例如,要读取 1kb:base64uuencodedd

dd if=/dev/urandom bs=1k count=1 2>/dev/null | base64

另一种选择是通过管道传递给strings命令,该命令可能会在其输出中提供更多变化(丢弃不可打印的字符,显示至少 4 个可打印字符的任何运行 [默认])。问题strings在于它在自己的行上显示每个“运行”。

dd if=/dev/urandom bs=1k count=1 2>/dev/null | strings

(当然您可以将整个命令替换为

strings /dev/urandom

如果你不想让它停止)。

如果您想要一些真正时髦的东西,请尝试以下之一:

cat -v /dev/urandom
dd if=/dev/urandom bs=1k count=1 2>/dev/null | cat -v
于 2009-08-08T23:58:14.450 回答
5

那么,有什么问题

cat /dev/urandom | uuencode -

?

在第一次尝试后修复并没有实际工作...... ::sigh::

顺便说一句——许多 unix 实用程序使用“-”代替文件名来表示“使用标准输入”。

于 2009-08-08T23:36:19.207 回答
4

关于如何对随机数据进行 base64 编码(即cat /dev/urandom | base64),已经有几个很好的答案。但是,在您的问题正文中,您详细说明:

... 在命令行上对 [urandom] 进行编码,使其所有输出都是可读字符,例如 base64 或 uuencode。

鉴于您实际上并不需要可解析的 base64 并且只希望它可读,我建议

cat /dev/urandom | tr -dC '[:graph:]'

base64仅输出字母数字字符和两个符号(默认为 + 和 /)。[:graph:]将匹配任何可打印的非空白 ascii,包括 base64 缺少的许多符号/标点符号。因此使用tr -dC '[:graph:]'会导致看起来更随机的输出,并具有更好的输入/输出效率。

I often use < /dev/random stdbuf -o0 tr -Cd '[:graph:]' | stdbuf -o0 head --bytes 32 for generating strong passwords.

于 2014-02-04T12:00:51.273 回答
1

你可以用 BASH 的 FIFO 管道做更多有趣的事情:

uuencode <(head -c 200 /dev/urandom | base64 | gzip)
于 2009-08-09T22:08:22.730 回答
1
cat /dev/urandom | tr -dc 'a-zA-Z0-9'
于 2012-08-23T20:54:20.957 回答
-2

尝试

xxd -ps /dev/urandom

xxd(1)

于 2009-08-13T03:42:52.530 回答