2017-06-14 10 views
1

私は既存の質問で答えを探しましたが、Railsでこのハッシュスキームをカバーするものは何も見つかりませんでした。Railsで特定のmd5ハッシングスキーム

私は現在、まだ学習中のRuby-on-RailsにPHPプロジェクトを移行しています。私は、ユーザーのパスワードをハッシュするためのMD5(私は知っている、それは一時的なものです...)ハッシングスキームを移植するのに苦労しています。私は平易なMD5が動作していますが、必要なハッシング・スキームの正しい構文を見つけることができません。 PHPプロジェクトのハッシュ方式の

仕組みは以下のとおりです。

は、パスワードのMD5ハッシュを作成します。 塩のMD5ハッシュを作成します。 password_hashをsalt_hashに連結します。 concatenated_stringのMD5ハッシュを作成します。 ハッシュを作成するため

PHPをconcatenated_stringにstored_hashの比較は以下のとおりです。

Spree::User.class_eval do 
    def valid_password?(password) 
    if self.salt.present 
     if ::Digest::MD5.hexdigest((::Digest::MD5.hexdigest(password)).(::Digest::MD5.hexdigest(salt))) == self.stored_hash 
     *# Do some stuff* 
     else 
     false 
     end 
    end 
    end 
end 

任意のアイデア:

function fn_generate_salted_password($password, $salt) 
{ 
    $_pass = ''; 

    if (empty($salt)) { 
     $_pass = md5($password); 
    } else { 
     $_pass = md5(md5($password) . md5($salt)); 
    } 

    return $_pass; 
} 

(哀れな)私がこれまでのRailsでのこのセクションのために持ってしようか?

+1

ことの一つは、可能な限り迅速にMD5パスワードをオフに殺害されます。誰かがログインしてパスワードが正しいと確認したときに、ユーザーレコードを適切にハッシュ化したバージョン(bcryptなど)で更新する機会があります。パスワードを変更するためにユーザーを嫌う必要はありません。 – tadman

+0

問題を抱えている人を助けるために、「テスト」や「例」のようなパスワードを保存して、コードが正しく動作していることを他の人が確認できるようにする例がありますか? – tadman

+0

MD5ハッシュがデータベースから削除され、パスワードがbcryptなどでハッシュされるというアイデアがあります。 最終的なハッシュ結果が "testing"と "サンプル "をPHPアプリケーションに追加し、できるだけ早くこの質問を答えに更新してください。 ちょうど私がここで目標とする必要がある "塩"は、 "salt"ではなく、legacy_saltのデータベースにフィールド名を持つでしょう。 MD5のダイジェストで使用されるデフォルトの「塩」ではないので、これをどこかに定義する必要はありますか? – bearmettle

答えて

1

私はこのような何かをするだろう:に向けて努力する

def valid_password?(password) 
    secret = if salt.present? 
      [password, salt].map { |part| ::Digest::MD5.hexdigest(part) }.join 
      else 
      password 
      end 

stored_hash == ::Digest::MD5.hexdigest(secret) 
end 
+0

これを拡張して '' $ 2a $ 10 $ .... ''のような新しいフォーマットのハッシュを認識し、Bcryptでもそれを扱うことができます。 – tadman

関連する問題