ActiveRecordでパスワード(Password)を上手に保存する

(注)確認環境はRails2.0RC1ですが、多分1.2.XでもOK
やはりパスワードをDBに生でいれるのはどうかと思うので、

before_save {|user| user.password = Digest::SHA256.digest(user.password)}

こんな感じに書いてやりましたところ、新規登録時は問題ないのですが、パスワード以外のデータを更新したときにもパスワードが勝手に変わるようになってしまいました。これは

user = User.find[params[:id] ←ここでハッシュ変換済みのパスワードが呼ばれる
user.attributes = params[:user]
user.save! ←ここで再度ハッシュ化してしまう

というように、二重にロジックが通ってしまうようになるのが原因でした。そこで「パスワード(確認用)」のフィールドを新たに設けて以下のようにすることで解決。

before_save {|user| user.password = Digest::SHA256.digest(user.password) unless user.password_confirmation.blank?}
validates_confirmation_of :password