LoginSignup
3
1

More than 5 years have passed since last update.

Linuxでの大きなサイズのランダムデータ生成 補足:Base64

Posted at

テストとかで個人的にはよく使うランダムデータと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変換の手順を以下に挙げる。
1. 元データを6ビットずつに分割。(6ビットに満たない分は0を追加して6ビットにする)
2. 各6ビットの値を変換表を使って4文字ずつ変換。(4文字に満たない分は = 記号を追加して4文字にする)

6bit <=> 4文字に変換するので、エンコード後のデータサイズは約4/3倍です。(最後に=埋めされる分、ピッタリ4/3倍にはならないです。)

変換表も定まっています。興味のある方はwikipediaを参照ください。

参考:
https://ja.wikipedia.org/wiki/Base64

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1