Rozumiem, że klasa szyfrowania generuje różne wyniki za każdym razem, gdy zaszyfrowane jest to samo słowo / ciąg znaków, na przykład $this->encrypt->encode("word")
przebiegł pięć razy wytworzył pięć różnych zaszyfrowanych ciągów.
Jak mogę odwołać się do zaszyfrowanego ciągu w zapytaniu DB, jeśli za każdym razem dzwonię $this->encrypt->encode("word")
daje mi coś innego?
Zapytany w inny sposób, czy jest coś, co mogę zaszyfrować, nie ma wartości losowej, więc za każdym razem, gdy zaszyfruję, otrzymuję to samo wyjście dla tego samego wejścia?
Odpowiedzi:
2 dla odpowiedzi № 1Kodowanie Base64 nie jest szyfrowaniem (odnosząc się do własnej odpowiedzi). Nie używałem codeigniter, ale zauważam na jego strony doc to pozwala:
$ this-> encrypt-> set_mode ();
Można szyfrować w trybie ECB (MCRYPT_MODE_ECB) dla deterministyczne szyfrowanie gdzie te same dane zawsze szyfrują do tego samego zaszyfrowanego tekstu. W ten sposób zaszyfrujesz swój ciąg wyszukiwania i będzie on odpowiadał zaszyfrowanym danym w bazie danych.
Jest to uważane za słabość trybu EBC, ale w tym przypadku deterministyczne zachowanie może być tym, czego chcesz.
1 dla odpowiedzi nr 2
Myślę, że base64_encode ($ str) jest tym, czego szukam.
0 dla odpowiedzi № 3
ten kod działa tylko na php 5.5 lub wyżej
echo password_hash(variable, PASSWORD_DEFAULT);
Pierwszym parametrem jest ciąg hasła, który musi zostać zaszyfrowany, a drugi parametr określa algorytm, który powinien zostać użyty do wygenerowania skrótu.
Domyślnym algorytmem jest obecnie bcrypt, ale silniejszy algorytm może zostać dodany jako domyślny później w pewnym momencie w przyszłości i może generować większy ciąg. Jeśli używasz PASSWORD_DEFAULT
w swoich projektach pamiętaj, aby zapisać hasz w kolumnie, której pojemność przekracza 60 znaków. Ustawienie rozmiaru kolumny na 255 może być dobrym wyborem. Możesz również użyć PASSWORD_BCRYPT
jako drugi parametr. W takim przypadku wynik zawsze będzie mieć długość 60 znaków.
i aby sprawdzić hash hasła, tutaj jest składnia
<?php
if (password_verify($oldpassword, $hash)) {
// Success!
// the first parameter is your password that"s not yet encrypted, the secode is your password encrypted
}
else {
// Invalid password
}