Odnawiam stronę z Ruby na Railsach do PHP. Potrzebuję wygenerować hasła generowane przez Devise Gem w Ruby on Rails. Muszę wiedzieć, jaka jest metoda hashowania hasła, aby stworzyć tę samą metodę z PHP. ale nie jest łatwo znaleźć kody wewnątrz Ruby on Rails jako początkujący. Jeśli ktoś wie, gdzie powinienem go sprawdzić, pomóż mi.Jak wygenerować hasło w PHP, tak jak robił to Devise Gem w Ruby on Rails
Te dwa są wszystko co znalazłem:
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
próbowałem popełnić tego samego zaszyfrowanego hasła w różny sposób z 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);
nie mogłem uzyskać ten sam wynik z dowolnego powyżej. Czy jest ktoś, kto mógłby mi podać metodę szyfrowania Devise Gem?
POMÓŻ MI !!!
ps. Nie jestem dobry z angielskiego. Nawet jeśli mój angielski nie jest poprawny, proszę się nie gniewać.
ja odpowiadając sobie:
szyfratora jest SHA1
Szukałem tylko "devise.rb" w folderze "\ config \ inicjalizatorów" szyfratora została commanted jako "# config.encryptor =: sha1" Ale jest jeszcze jedno "devise.rb" wewnątrz folderu Ruby lib, "\ Ruby191 \ lib \ ruby \ gems \ 1.9.1 \ gems \ devise-1.0.8 \ lib \ devise.rb " Jest jeszcze jeden konfigurat ion jako "@@ szyfratora: SHA1 ="
Encryption Metoda z zastosowaniem SHA1 Kiedy idziesz do pliku poniżej widać kody algorytmu: \ Ruby191 \ lib \ ruby \ klejnotów \ 1.9.1 \ klejnotów \ opracować-1.0.8 \ lib \ Devise \ encryptors \ sha1.rb
wymagać "przetrawić/SHA1"
moduł opracować modułu encryptors # = SHA1 # Używa algorytmu SHA1 hash do szyfrowania haseł. klasa SHA1 < Baza
# 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
koniec
Więc tłumaczona na 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;
}
to działa bardzo dobrze :-)
Czy możesz dać mi hasło/opracowania szyfrowane pary hasło dla celów testowych? Obecnie czytam źródła danych dla prawidłowej odpowiedzi i chcę je przetestować. – GergelyPolonkai
Szybki przegląd kodu źródłowego Devise na GitHub sugeruje, że oprócz dodawania soli (która powinna się zmienić dla każdego użytkownika) do wartości mieszania, program Devise dodaje także wartość papryki (która jest taka sama dla każdej instalacji) do wartości mieszania , który jest odczytywany z konfiguracji Devise. Więc możesz potrzebować znać tę wartość z pliku konfiguracyjnego. (Nie jestem programistą z Ruby, przepraszam, jeśli źle odczytuję ...) – Jazz
Ostatni raz wiedziałem ... Devise używał Bcrypt ... Miałem podobny problem z Coldfusion i właśnie nazwałem bibliotekę Java jako obiekt. Dunno, jeśli PHP może to zrobić ... –