簡単に衝突しないような文字列をつくってファイルを保存するようなことをしたい。
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にしているので、Base64が 0-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"
が内部やってる処理とほとんど同じなんだけどね・・・