如何base64编码/ dev / random或/ dev / urandom?

时间:2009-08-08 23:33:32

标签: bash linux base64 uuencode random

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

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

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

7 个答案:

答案 0 :(得分:66)

这样的东西
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的{​​{1}}选项,以避免出现“短线”:

base64

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

答案 1 :(得分:21)

许多人建议cat通过base64uuencode进行管道调查。这个问题的一个问题是你无法控制要读取多少数据(它将永远持续,或者直到你点击ctrl + c)。另一种可能性是使用dd命令,它允许您指定在退出之前要读取的数据量。例如,阅读1kb:

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

答案 2 :(得分:5)

那么,

有什么问题
cat /dev/urandom | uuencode -

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

BTW--许多unix实用程序使用' - '代替文件名来表示“使用标准输入”。

答案 3 :(得分:4)

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

  

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

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

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

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

我经常使用< /dev/random stdbuf -o0 tr -Cd '[:graph:]' | stdbuf -o0 head --bytes 32来生成强密码。

答案 4 :(得分:1)

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

uuencode <(head -c 200 /dev/urandom | base64 | gzip)

答案 5 :(得分:1)

cat /dev/urandom | tr -dc 'a-zA-Z0-9'

答案 6 :(得分:-2)

尝试

xxd -ps /dev/urandom

xxd(1)