読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

.htpasswdファイルを操作する

Ruby

WEBrick::HTTPAuth::Htpasswd「.htpasswd」互換のファイルを作成したり、記録されているデータにアクセスしたりできます。

require 'webrick'

# Htpasswdのインスタンスを作成。
# 引数で保存先ファイル名を指定する。
passwd = WEBrick::HTTPAuth::Htpasswd.new('./pass')

# パスワードを登録。
passwd.set_passwd(nil, 'user', 'password')
passwd.flush # 保存
puts IO.read( "./pass" )

# パスワードを取得。
# もともとのパスワードではなく、「crypt された文字列」が返される。
pass = passwd.get_passwd(nil, 'user', false)
puts pass

# ユーザー認証はこんな感じで。
#   -保存されたcrypt済みパスワードと、cryptしたパスワード
#    を比較して同一であることをチェックする。
#   -保存されたcrypt済みパスワードの先頭の2文字がsalt
puts pass == "passward".crypt(pass[0..2]) # => false
puts pass == "password".crypt(pass[0..2]) # => true

実行結果です。

user:eNBO0nZMf3rWM
eNBO0nZMf3rWM
false
true

おー、これでユーザー名とパスワードを(気休めレベルかもしれないにしても)さくっと暗号化して保存できるなーと期待したけど、よくよく調べてみるとそういった用途には使えないようだ。

  • 「.htpasswd」はcryptを使って暗号化したパスワードを記録している。
  • cryptでの暗号化は一方向。生成された文字列から元の文字列は(攻撃的手法を除いて)復元できない。

よって、認証には使えるけど、もともとのパスワードを安全に保存したい場合には使えない。んー、残念。