Как сгенерировать пароль в PHP, как это сделал Devise Gem в Ruby on Rails

Я обновляю веб-сайт с Ruby on Rails на PHP. Мне нужно сгенерировать пароли, созданные Devise Gem в Ruby on Rails. Я должен знать, каков метод хеширования пароля, чтобы создать тот же метод с PHP. но новичку нелегко найти эти коды внутри Ruby on Rails. Если кто-то знает, где я должен проверить, чтобы найти его, пожалуйста, помогите мне.

Это все, что я нашел:

1) The configuration of encryptor is disabled in devise.rb like below:
  # config.encryptor = :sha1
2) I read the comments very carefully then I found that they using sha512 and bcrypt as default encryptor.
  # (default), :sha512 and :bcrypt. Devise also supports encryptors from others

Я пытался сделать один и тот же зашифрованный пароль разными способами с помощью PHP:

1) sha1('--'.$password_salt.'--'.$encrypted_password);
2) sha1($password_salt.'-----'.$encrypted_password);
3) sha1('--'.$password_salt.'--'.$encrypted_password.'--');
4) sha1($password_salt.$encrypted_password);
5) sha1($encrypted_password.$password_salt);
6) substr(hash('sha512', $password_salt.$encrypted_password, false), 20);
7) substr(hash('sha512', $encrypted_password.$password_salt, false), 0, 40);
8) hash('sha512', $encrypted_password.$password_salt, false);
9) hash('sha512', $password_salt.$encrypted_password, false);
10) substr(hash('sha512', '--'.$password_salt.'--'.$encrypted_password.'--', false), 0, 40);

Я не смог получить такой же результат ни с одним из вышеперечисленных способов. Есть ли кто-нибудь, кто мог бы сказать мне метод шифрования Devise Gem??

ПОМОГИТЕ МНЕ!!!

с. Я не очень хорошо владею английским языком. Даже если мой английский неверен, пожалуйста, не сердитесь.


Сам себе отвечаю:

  1. Шифровальщик Sha1

    Искал только "devise.rb" в папке "\config\initializers" Шифровальщик был указан как "# config.encryptor = :sha1" Но есть еще один "devise.rb" внутри папки Ruby lib, "\Ruby191\lib\ruby\gems\1.9.1\gems\devise-1.0.8\lib\devise.rb" Существует еще одна конфигурация: "@@encryptor = :sha1"

  2. Метод шифрования с использованием Sha1. Когда вы перейдете к файлу ниже, вы увидите коды для алгоритма: \Ruby191\lib\ruby\gems\1.9.1\gems\devise-1.0.8\lib\devise\encryptors\sha1.rb

    требуется модуль "digest/sha1"

    Devise модуль Шифрователи # = Ша1 # Использует хэш-алгоритм Sha1 для шифрования паролей. class Sha1 < Base

    # Создает дайджест пароля по умолчанию на основе растяжек, соли, перца и
     # входящий пароль.
    def self.digest(пароль, растяжки, соль, перец)
    переварить = перец
    stretches.times { дайджест = self.secure_digest (соль, дайджест, пароль, перец) }
    переваривать
    конец
    
    частный
    
     # Создать дайджест SHA1, объединяющий аргументы. Сгенерированный токен выглядит примерно так
     # --arg1--arg2--arg3--argN--
    def self.secure_digest(*токены)
     ::Digest::SHA1.hexdigest('--' << tokens.flatten.join('--') << '--')
    конец
    
    конец
    конец
    

    end

Итак, я перевел на PHP

function encrypt_password($salt, $password) {
    $pepper = '';
    $digest = $pepper;
    $stretches = 10;

    for ($i=0; $i<$stretches; $i++) {
        $join = '--'.$salt.'--'.$digest.'--'.$password.'--'.$pepper.'--';
        $digest = Sha1($join);
    }
    $result = substr($digest, 0, 40);
    return $result;
}

работает очень хорошо :-)

6
задан 11 revs 25 April 2012 в 20:10
поделиться