Nie jestem pewien, który algorytm crypt() używa podczas mieszania. Spojrzałem na podręcznik PHP, ale po prostu mówi, że używa tego, co jest dostępne. Ale skąd mam wiedzieć, którego używa i jak go używać, jak określić, którego użyć? Używam MAMP obecnie jako mojego środowiska programistycznego, ale sądzę, że musi istnieć sposób, aby dowiedzieć się z oświadczeniem w PHP.Jak dowiedzieć się, który algorytm crypt() używa na twoim komputerze?
Odpowiedz
Algorytm określa się jako część ciągu soli. Na przykład zaczynając od numeru $2a$
, otrzymasz kod Blowfish. Jeśli urządzenie nie obsługuje algorytmu, którego próbujesz użyć, nie uzyskasz znaczącego wyniku. Możesz spróbować dowiedzieć się z wyprzedzeniem, które algorytmy są obsługiwane przez sprawdzenie niektórych wstępnie zdefiniowanych stałych, takich jak CRYPT_BLOWFISH
, chociaż zauważyłem, że stałe CRYPT_SHA256
i CRYPT_SHA512
nie zawsze są zdefiniowane, przynajmniej w PHP 5.2. Począwszy od PHP 5.3, PHP ma swoje własne implementacje algorytmów, więc nie ma znaczenia, co system ma do dyspozycji w czasie kompilacji PHP, tak jak w PHP 5.2 i wcześniejszych. Poprawka Suhosin dla PHP 5.2 podobno dodaje co najmniej Blowfish, ale jego implementacja nie wydaje się być zgodna z tą używaną w PHP 5.3.
PHP docs for the crypt()
function dostarczają informacje na temat korzystania ciąg soli, aby określić, który algorytm użyć:
- CRYPT_STD_DES - hash standard DES oparte z solą dwóch znaków z alfabetu”./0-9A-Za-z ". Użycie nieprawidłowych znaków w soli powoduje, że crypt() nie powiedzie się.
- CRYPT_EXT_DES - Rozszerzony DES oparty mieszanie . "Sól" to 9-znakowy ciąg złożony z podkreślenia , po którym następuje 4 bajty liczby iteracji i 4 bajty soli. Są to zakodowane jako znaki drukowalne, 6 bitów na znak, co najmniej znaczący znak jako pierwszy. Wartości od 0 do 63 są kodowane jako "./0-9A-Za-z". Użycie nieprawidłowych znaków w soli spowoduje niepowodzenie krypto() .
- CRYPT_MD5 - MD5 mieszania z solą dwanaście znaków począwszy od $ 1 $
- CRYPT_BLOWFISH - Blowfish mieszaja z solą jako następująco: "$ 2a $", parametr kosztów dwucyfrowy, "$", a 22 cyfr od alfabet "./0-9A-Za-z". Użycie znaków spoza tego zakresu w spowoduje, że funkcja crypt() zwróci łańcuch o zerowej długości. Obydwa parametry kosztu cyfrowego to logarytm bazowy 2 licznika powtórzeń dla algorytmu bazującego na algorytmie mieszania opartym na Blowfish i musi on być w zakresie z zakresu 04-31, wartości spoza tego zakresu spowodują niepowodzenie krypto().
- CRYPT_SHA256 - SHA-256 hash z szesnastoma znakami soli z prefiksem z 5 $. Jeśli ciąg soli zaczyna się od "rounds = $", numeryczna wartość N jest używana do wskazania, ile razy pętla mieszająca powinna mieć wartość , podobnie jak parametr kosztu na Blowfish. Domyślna liczba rund to 5000, minimalna wartość to 1000, a maksymalna to 999,999,999. Dowolny wybór N poza tym zakresem zostanie obcięty o do najbliższego limitu.
- CRYPT_SHA512 - SHA-512 hash z szesnastoma solami o znaku z prefiksem $ 6 $. Jeśli ciąg soli zaczyna się od "rounds = $", wartość liczbowa N jest używana do wskazania, ile powinno być wykonanych pętli haszowania, podobnie jak parametr kosztu na Blowfish.Domyślna liczba rund to 5000, jest co najmniej 1000, a maksymalnie 999,999,999. Dowolny wybór N poza tym zakresem zostanie obcięty do najbliższego limitu.
Tak więc, aby określić, że ma ciąg „hasło” zakodowane przy użyciu Blowfish z 2^10 iteracji, można użyć
crypt('password', '$2a$10$XA86t7EJ0xD9OYEUbnTulT');
gdzie łańcuch rozpoczynający się XA86
jest sól.
Wreszcie, jeśli chcesz uzyskać więcej przykładów lub po prostu chcesz zająć się czymś w tym biznesie związanym z kompatybilnością haseł, spójrz na numer phpass. Jest to domena publiczna i działa dobrze w moim doświadczeniu. Automatycznie użyje "najlepszego" algorytmu w systemie, chyba że określisz, że chcesz mieć skrót, który jest kompatybilny z wieloma systemami, w którym to przypadku (jak sądzę) używa MD5.
Tak, to też był mój problem. Naprawdę nie ma wystarczających informacji na ten temat z jakiegoś dziwnego powodu. – Andy
Czy możesz pokazać mi przykład tego, jak będzie wyglądał przy użyciu $ 2a $ na przykład, aby krypta wiedziała, który algorytm użyć? – Andy
Tak, będę edytować za chwilę. Nie mogłem ci podać więcej informacji, ponieważ pisałem na telefonie, gdy chodzę do kasy, aby sprawdzić w sklepie. – Andrew
- 1. Jak dowiedzieć się, który moduł ładuje Łosia?
- 2. Jak dowiedzieć się, jaki algorytm [szyfrowanie] obsługuje moja JVM?
- 3. Jak się dowiedzieć, czy strona internetowa używa HSTS
- 4. Który algorytm sortowania znajduje się za NSSortDescriptor?
- 5. Git: Jak się dowiedzieć, który tag oddziału jest?
- 6. Jak mogę się dowiedzieć, który widok jest aktualnie skupiony?
- 7. Jak mogę się dowiedzieć, który element GWT jest aktywny?
- 8. Sprawdzanie, który kompilator Maven używa
- 9. inotify - jak dowiedzieć się, który użytkownik zmodyfikował plik?
- 10. Jak ocenić, który perl działa na komputerze z systemem Windows
- 11. Jak mogę się dowiedzieć, który klejnot ma określoną zależność?
- 12. wxPython: Jak mogę się dowiedzieć, który widget jest aktywny?
- 13. Jak dowiedzieć się, który inny UIScrollView przeszkadza scrollsToTop?
- 14. Jak sprawdzić, który port używa procesu?
- 15. Jak sprawdzić, który proces używa danego pliku?
- 16. Który kompilator używa Android NDK?
- 17. Jak się dowiedzieć, na jakim widoku zakończyło się wydarzenie dotykowe?
- 18. jak się dowiedzieć, kiedy kończy się ładowanie listview na Androidzie
- 19. crypt (3) algorytm mieszania hasłem 6 $ (oparty na SHA-512) w Javie?
- 20. Jak usunąć plik cookie, który ustawiłem na czyimś komputerze?
- 21. Gdzie mogę się dowiedzieć o systemach rekomendacji?
- 22. Circular ViewPager, który używa FragmentPagerAdapter
- 23. Jaki algorytm mieszania używa mapowanie słownika Pythona?
- 24. Jak mogę się dowiedzieć, który magazyn kluczy został użyty do podpisania aplikacji?
- 25. Jak dowiedzieć się, dlaczego Maven zawierał słoik?
- 26. jak sprawdzić, który plik Xib używa obrazu?
- 27. Jak mogę sprawdzić, który javascript używa java
- 28. Chcesz dowiedzieć się więcej na temat NTILE()
- 29. Jaki algorytm R używa do obliczania średniej?
- 30. Jak napisać algorytm, który odfiltrowuje fałszywe nazwy?
jakiego formatu soli używasz? – CodesInChaos
Dostarczenie soli, jeśli o to pytasz. – Andy
Jeśli dobrze pamiętam, format soli określa algorytm sprawdzania dokumentacji: http://php.net/manual/en/function.crypt.php – CodesInChaos