それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

手早くランダムな文字列を作成する

簡単に衝突しないような文字列をつくってファイルを保存するようなことをしたい。

OpenSSLを使えば割と楽

require 'openssl'
str =  [OpenSSL::Random.random_bytes(12)].pack("m*").delete("\n")
puts str

ワンライナー

ruby -r openssl -e 'print [OpenSSL::Random.random_bytes(12)].pack("m*")'

パスワードに使えるのか?

ある程度はランダムな数字の配列をBase64にしているので、Base640-9,a-z,A-Z,+/なので + / がパスワードとして嫌われそうで面倒くさい。 (とうぜん使えるべきなんですがね)

Base64化のアルファベットのした文字出現頻度に偏りがなければ大丈夫なのですが、単なる符号化だしほぼランダムだと思う。

記号を置換すれば、使いやすくなるかも?

takuya@untitled$ ruby -r openssl -e 'print [OpenSSL::Random.random_bytes(12)].pack("m*").tr("+/","-_")'

ループして作ってみる

takuya@untitled$ for i in {1..3};
do
  ruby -r openssl -e 'print [OpenSSL::Random.random_bytes(12)].pack("m*").tr("+/","-_")' 
done
NTJ0XFAlWCcwZsiG
5M5UGQQikFE0TVNh
i9mq-nbxfI7mS3pJ

まぁこの手法は require "securerandom" が内部やってる処理とほとんど同じなんだけどね・・・