昨晩は、n桁の16進数を生成しました。

今晩は、n文字のランダムな半角英数文字列を生成するRubyスクリプトを書いてみました。

ただ文字列を生成するだけだとあまり面白くないので、optparseを使ってオプションを取るようにしました。

以下、コード。

   1  #/usr/bin/env ruby
   2   
   3  require 'optparse'
   4   
   5  def main(argv)
   6    options = {}
   7   
   8    option_parser = OptionParser.new {|opt|
   9      opt.on('-l LENGTH', '--len LENGTH', 'Set password length'){|v| options[:l] = v}
  10      opt.on('-a [OPTIONAL_CHARS]', '--add [OPTIONAL_CHARS]', 'Add optional characters'){|v| options[:a] = v}
  11      opt.parse!(argv)
  12    }
  13   
  14    if options[:l]
  15      puts mkpasswd(options[:l].to_i, (options[:a] || "").split(//))
  16    else
  17      puts option_parser
  18    end
  19  end
  20   
  21  def mkpasswd(n, optional_chars)
  22    passwd = ""
  23   
  24    lower_chars = ("a".."z").to_a
  25    upper_chars = ("A".."Z").to_a
  26    numbers = ("0".."9").to_a
  27   
  28    passwd_chars = (lower_chars + upper_chars + numbers + optional_chars).uniq
  29    passwd_chars_size = passwd_chars.size
  30   
  31    passwd = Array.new(n){ passwd_chars[rand(passwd_chars_size)] }.join
  32   
  33    return passwd
  34  end
  35   
  36  main(ARGV)

使い方は、

   1  $ ruby mkpasswd.rb           
   2  Usage: mkpasswd [options]
   3      -l, --len LENGTH                 Set password length
   4      -a, --add [OPTIONAL_CHARS]       Add optional characters
で確認できます。

実際に使ってみます。

63文字の文字列を生成する

   1  $ ruby mkpasswd.rb -l 63     
   2  qyXsKDICRoyweiA3MPVkC1Q2xXdY5uh00cxgWGrhj1b7HKvMwUNkpmSOG1QJTuk

-aオプションを使って, 記号を入れる

   1  $ ruby mkpasswd.rb -l 63 -a _@!
   2  My!n1WEYoc1R94JJW3X6JtmPKCJOjseWuubhH8R_bRo6bYnwAoKgSNzfyskv@RD

とまぁ、こんな感じです。

細かいところは気にせず自分用に書いたので、まだまだ改良する必要があります。

なんとなく、GitHub に置いてみました。

もしよければ使ってみてくださいm(_ _)m

posted by Png y_tsuda on Tue 4 Nov 2008 at 22:20

WPA-PSKのために64桁の16進数を作成したくて、ちゃちゃっと書いてみた。

   1  def mkhex(n)
   2    hex_str = ""
   3  
   4    n.times do 
   5      hex_str << "%x" % rand(16)
   6    end
   7  
   8    return hex_str
   9  end

実行してみるとこんな感じ。

   1  mkhex(64)
   2   #=> "98979206f86479fe2c17a987b23ba787c41afd405d7f7efbe2d61484f065d413"

WPA-PSKは、64桁の16進数の他に、8~63文字の半角英数字(ASCII)も受け付けているので、今度はそっちを生成するコードを書いてみようかな。

posted by Png y_tsuda on Tue 4 Nov 2008 at 01:40
Contents
n文字の半角英数文字列を生成する
n桁の16進数を生成する
Comments
瀧内元気: MacOS版は以下にあります * [genki/ViMouse](https://githu... '23-1
KingofSmack: Here also good reads for this mobile applicatio... '14-5
Spencer: You don't have to re-compile it, this version w... '14-4
staiano: Any chance we can get a recompile for 10.9? '14-1
dsjf: https://gist.github.com/6bf1bf2c3cbb5eb6e7a7 これ... '13-1
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ