テストとかで個人的にはよく使うランダムデータとbase64、その度に調べるのもなんなので残しておきます。
ランダムデータ生成
/dev/urandom
というデバイスファイルがランダムデータを吐き出してくれます。
なので、
head -c 2m /dev/urandom > tmp.dat
とやるとランダムのバイナリデータが吐き出されます。上記だと2Mbyteになります。
文字列にしたいならこんな感じでbase64エンコーディングするとよいです。
head -c 2m /dev/urandom | base64 | tr -d "\n">> tmp.txt
base64
は入力値をデータを印字可能な英数字に変更する(Base64エンコード)為のコマンド。
その後ろのtr -d "\n"
は改行削除です。
エンコード後はサイズが約4/3倍になるのでご注意ください。
補足: Base64エンコード
Base64
は上記でも記載した通り、入力値をデータを印字可能な英数字に変更する為のエンコード方式です。
可逆(デコードすると全く同じデータに戻せる)なので、ネットワーク通信でのメッセージ定義や、今回のようにバイナリデータを文字にして扱いたいなんてケースで見かけることがあります。
大体の言語で標準的に使えるので、ふとしたバイナリデータでの保存めんどくさい!みたいなケースでの利用は割と便利だったりします。
Linuxなら以下のような感じ
$ echo "test" | base64
dGVzdAo=
$echo "dGVzdAo=" | base64 -d
test
Wikipediaより、以下のような仕組みとなっています。
Base64変換の手順を以下に挙げる。
- 元データを6ビットずつに分割。(6ビットに満たない分は0を追加して6ビットにする)
- 各6ビットの値を変換表を使って4文字ずつ変換。(4文字に満たない分は = 記号を追加して4文字にする)
6bit <=> 4文字に変換するので、エンコード後のデータサイズは約4/3倍です。(最後に=埋めされる分、ピッタリ4/3倍にはならないです。)
変換表も定まっています。興味のある方はwikipediaを参照ください。