• 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

昨晩は、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
Aleksey: The uname check is only due to a somewhat slopp... '11-2
Yu Tsuda: あぁ、そうですね、、syncすると戻ってしまいますね・・・。 ご指摘ありがとうございます!! '09-7
ursm: /usr/portage 以下のファイルは更新のたび元に戻ってしまうので、/etc/porta... '09-7
Yu Tsuda: 見た目だけでも、わざわざGentooをこういうリストに入れてるのがすごいなぁと思ったりしたので... '09-3
Leonard Chin (レオ): ただし、VirtualBoxで「Gentoo」などを選択しても、別にどのOSを入れても大丈夫だ... '09-3
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ