Come generare la password in PHP come ha fatto Devise Gem in Ruby on Rails

Sto rinnovando un sito web da Ruby on Rails a PHP. Devo generare le password generate da Devise Gem in Ruby on Rails. Devo sapere qual è il metodo di hashing per la password per creare lo stesso metodo con PHP. ma non è facile trovare i codici all'interno di Ruby on Rails come principianti. Se qualcuno sa where dovrei controllare per trovarlo, per favore aiutathemes.

Questi due sono tutto ciò che ho trovato:

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 

Ho provato a creare la stessa password crittografata in modi diversi con 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); 

Non ho potuto get lo stesso risultato da nessuno di sopra. C'è qualcuno che potrebbe dirmi il metodo di crittografia di Devise Gem ??

AIUTAMI!!!

ps. Io non sono bravo in inglese. Anche se il mio inglese non è corretto, per favore non essere arrabbiato.


Sto rispondendo a me stesso:

  1. Encryptor è Sha1

    Stavo cercando solo "devise.rb" nella cartella "\ config \ initializers". Il codificatore è stato commutato come "# config.encryptor =: sha1" Ma c'è un altro "devise.rb" all'interno della cartella lib di Ruby, "\ Ruby191 \ lib \ ruby ​​\ gems \ 1.9.1 \ gems \ devise-1.0.8 \ lib \ devise.rb "C'è un'altra configuration come" @@ encryptor =: sha1 "

  2. Metodo di crittografia che utilizza Sha1 Quando si passa al file seguente, verranno visualizzati i codici dell'algorithm: \ Ruby191 \ lib \ ruby ​​\ gems \ 1.9.1 \ gems \ devise-1.0.8 \ lib \ devise \ encryptors \ sha1.rb

    richiedere "digest / sha1"

    module Devise module Encryptors # = Sha1 # Usa l'algorithm di hash Sha1 per crittografare le password. class Sha1 <Base

      # Gererates a default password digest based on stretches, salt, pepper and the # incoming password. def self.digest(password, stretches, salt, pepper) digest = pepper stretches.times { digest = self.secure_digest(salt, digest, password, pepper) } digest end private # Generate a SHA1 digest joining args. Generated token is something like # --arg1--arg2--arg3--argN-- def self.secure_digest(*tokens) ::Digest::SHA1.hexdigest('--' << tokens.flatten.join('--') << '--') end end end 

    fine

Così ho tradotto in 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; } 

sta funzionando molto bene 🙂

Il codice elaborato assomiglia a:

  def self.digest(password, stretches, salt, pepper) ::BCrypt::Engine.hash_secret("#{password}#{pepper}",salt, stretches) end 

Puoi vedere come fare bcrypt in PHP su Come usi bcrypt per le password di hashing in PHP?

Per impostazione predefinita, Devise utilizza 10 tratti.

Il sale sembra essere il primo 29 caratteri della password crittografata. È ansible eseguire (nei binari) User.first.authenticable_salt

Il pepe dovrebbe essere elencato in config/initializers/devise.rb ma potrebbe usare il token segreto dell'applicazione.

Si prega di consultare https://github.com/plataformatec/devise/blob/master/lib/devise/models/encryptable.rb

Secondo le fonti di Devise Gem, il metodo è un po 'più complicato. la parte SHA512 sarebbe simile a questa:

 function sha512_digest($password, $stretches, $salt, $pepper) { $digest = $pepper; for ($i = 0; $i < $stretches; $i++) { $digest = hash('sha512', '--' . $salt . '--' . $digest . '--' . $password . '--' . $pepper . '--'); } } 

La parte di BCrypt non mi è chiara, l'unica cosa che ho scoperto finora è che si tratta di una crittografia Blowfish.