web-dev-qa-db-ja.com

/ dev / randomまたは/ dev / urandomをbase64エンコードする方法は?

cat /dev/urandomは常にディスプレイにスクロール文字を作成する楽しい方法ですが、印刷できない文字が多すぎます。

すべての出力が読み取り可能な文字(base64やuuencodeなど)になるように、コマンドラインで簡単にエンコードする方法はありますか。

追加のファイルを作成する必要のないソリューションを好むことに注意してください。

43
alexanderpas

何かのようなものはどうですか

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

(同じ種類の出力^^)


EDIT:--wrapオプションのbase64、「短い線」を避けるため:

base64 --wrap=0 /dev/urandom

これによりラッピングが削除され、「フルスクリーン」表示が得られます^^

66
Pascal MARTIN

多くの人々がcattingとbase64またはuuencodeを介してパイプすることを提案しています。これに関する1つの問題は、読み取るデータ量を制御できないことです(永久に、またはctrl + cを押すまで続きます)。もう1つの可能性は、ddコマンドを使用することです。これにより、終了する前に読み込むデータの量を指定できます。たとえば、1kbを読み取るには:

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

もう1つのオプションは、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
21
Adam Batkin

だから、何が悪いの

cat /dev/urandom | uuencode -

最初の試行が実際に機能しなかった後に修正されました... :: sigh ::

ところで-多くのUNIXユーティリティは、ファイル名の代わりに「-」を使用して「標準入力を使用する」ことを意味します。

5
dmckee

ランダムデータをbase64でエンコードする方法については、すでにいくつかの良い回答があります(つまり、cat /dev/urandom | base64)。ただし、質問の本文では次のように詳しく説明します。

...コマンドラインで[urandom]をエンコードし、その出力がすべて読み取り可能な文字、たとえばbase64またはuuencodeになるようにします。

あなたが実際に解析可能なbase64を必要とせず、単にそれを読みやすくしたいなら、私は提案します

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

base64は、英数字と2つの記号(デフォルトでは+および/)のみを出力します。 [:graph:]は、base64にはない多くの記号/句読点記号を含む、印刷可能な非空白ASCIIに一致します。したがって、tr -dC '[:graph:]'は、よりランダムに見える出力になり、入出力効率が向上します。

私はよく< /dev/random stdbuf -o0 tr -Cd '[:graph:]' | stdbuf -o0 head --bytes 32強力なパスワードを生成します。

4
Aaron J Lang

BASHのFIFOパイプを使用すると、もっと面白いことができます。

uuencode <(head -c 200 /dev/urandom | base64 | gzip)
1
greyfade
cat /dev/urandom | tr -dc 'a-zA-Z0-9'
1
Serg