RubyでCGIスクリプトを作る下準備・cryptを使う

掲示スクリプト等で使いそうなパスワード人証を作っておく。
saltはランダムで選ぶ仕様。
一般的なDESとMD5に対応。

参照)
Rubyリファレンスマニュアル -String- http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=String

#!/usr/local/bin/ruby

#
# Cryptテスト
#

def encrypt(pwd)
  salt = [rand(64), rand(64)].pack("C*").tr("\x00-\x3f", "A-Za-z0-9./")
  return pwd.crypt(salt)
end

def checkpwd(chk, pwd)
  if pwd =~ /^\$[0-9]\$([A-Za-z0-9\.\/]+)\$([A-Za-z0-9\.\/]+)$/ # MD5
    salt = $1
  else
    pwd =~ /^([A-Za-z0-9\.\/]{2})/ # MD5以外は一般的なDESとしてみる
    salt = $1
  end

  if pwd == chk.crypt(salt)
    return true
  else
    return false
  end
end

pass = "hoge"
pass = encrypt(pass)
print pass + "\n"

if checkpwd("hoge", pass)
  print "hoge\n" # 実行される
end

if checkpwd("hogehoge", pass)
  print "hogehoge\n" # 実行されない
end