4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

テキトーな値を取る

Last updated at Posted at 2014-10-30

テキトーな値がほしい

PHPでフレームワークを使おうとすると大体のフレームワークで
セキュリティー用のtokenを用意してください
みたいな項目が出てくる.

キーボードをガチャガチャ鳴らして用意するのも問題ないけど,
大文字が無かったり,キーボードの配置的に偏ったりするのがなんとなく嫌.
あと,何文字打ってるか分かりづらいのも難点.

ってことで簡単にランダムな文字列作れないかな〜と思って探してみた.
そんなパスワード生成用のコマンドもあった気がしたけど毎回インストールされている訳じゃないので
できるだけデフォルト装備のコマンドが望ましい...

って調べて出てきたのが次のサイト

10 Ways to Generate a Random Password from the Command Line
http://www.howtogeek.com/howto/30184/10-ways-to-generate-a-random-password-from-the-command-line/

メッセージのチェックを行うsha256sum等を使ったり,base64を使って変換した値をランダム値として活用したり,/dev/urandom という擬似デバイスから文字列を取ってきて tr コマンドで欲しい文字タイプのみに整形するのが一般的なよう.

たった一つの「指定文字数を切り出す」という処理が色々な方法で書かれているのがなかなか面白いw

特徴として

  • sha256sum や md5sum などは16進数で表された計算値なので0-9a-zの値のみになる のでレパートリー少なめ
  • base64は + や / といった記号も出てくるし色々な文字列が大文字小文字どちらも現れる けど末尾が必ず =
  • /dev/urandom はtrコマンド次第で好きに使われている文字や記号等を決める事ができる けどコマンドが長くて面倒くさくなる

といった感じ.

今日はここらへんで

ちょっと追記

これが楽なんでね?

md5sum とか sha256sum は[0-9a-f]だけだからなんとなく心もとない
/dev/urandom だとなんだか長くなりがちだし,自分でコマンドを組もうにも仕組みをあまり理解できてないから四苦八苦しそう (さっき適当に試してみようとしたらターミナルに文字がアホみたいに出力されて慌ててたり ^^; )
base64 だといい感じのができそうだけど,実際は文字列の変換なだけでランダムな文字列を生成するのは苦手

ってな感じで一長一短...

まぁサイトみた限りシンプルだったのは

$ date | md5sum

ここはsha256sumとかにも変えられるし,1秒違うだけでも結構変わるのでオススメ.
そこをもっといい感じの文字列にしたければ

$ date | md5sum | base64

とすればok

md5sum の仕様上末尾に必ず ' -' って文字列がくっつくから base64の文字列も固定になるけどそこはあまり気にしなくても問題無いだろうし

ちなみに base64 には -w オプションがあって,改行する文字数を指定できたりするのでそこで文字数調整も可能だったり.

自分で考えたつもりが,気づけばサイトの一番上のと同じになってたのは秘密.

そんな感じで

4
4
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
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?