Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Funkcja kodująco - dekodująca ...
Forum PHP.pl > Forum > Przedszkole
Elber
Witam, czy istnieje jakaś funkcja która wygeneruje mi pewny ciąg znaków, o jakiś określonych parametrach, tak aby funkcja dekodująca mogła to rozkodować i stwierdzić autentyczność ciągu...trochę to zagmatwane, ale chodzi mi o to aby między kilkoma stornami przesłać taki kod post'em a strony które odbiorą ten ciąg znaków wykonały dane czynności, tylko chodzi mi o to aby to nie była żadna dziura w skrypcie tylko jakieś bezpieczne smile.gif
wookieb
mbstring
markonix
Określ kody dla poszczególnych akcji i dodaj jakieś zmienne środowiskowe, o których będą wiedziały te aplikacje.
Np. 2 argument to md5 z daty albo coś takiego.
Elber
Hmm no ale żeby się wszystko trzymało kupy to jak coś zakoduje na jednej stronie i wyślę do drugiej to tam powinno to rozkodować i sprawdzić czy rozkodowany ciąg spełnia jakieś kryteria ... tylko nie mam kompletnie pomysłu jak to zrobić...
Elber
nospr mógłbyś trochę rozwinąć wypowiedź ? Bo nie za bardzo wiem (mimo że czytam właśnie o tej funkcji) jak ją użyć w moim przypadku sad.gif
nospor
Chciałeś kodowac jakies dane, tak? No to ta funkcja koduje. A inna funkcja o podobnej nazwie te dane dekoduje.
Elber
Tak wiem. Ale jak np użyję:
  1. function encryptData($value){
  2. $key = "top secret key";
  3. $text = $value;
  4. $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
  5. $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
  6. $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv);
  7. return $crypttext;
  8. }
  9.  
  10. function decryptData($value){
  11. $key = "top secret key";
  12. $crypttext = $value;
  13. $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
  14. $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
  15. $decrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $crypttext, MCRYPT_MODE_ECB, $iv);
  16. return trim($decrypttext);
  17. }
i wywołam funkcję encryptData('cos'); to defakto aby sprawdzić czy kod jest prawidłowy muszę w drugim skrypcie zastosować if'a w którym będzie porównanie czy decryptData($_POST['zmienna encryptData('cos')']) == cos a ja chciałbym tego uniknąć biggrin.gif szczerze to nie wiem czy to jest realne biggrin.gif chciałbym aby zakodowany text za każdym razem był inny smile.gif

Da rade tak to zrobić jak sobie wykombinowałem ? Czy nie za bardzo ?
Fifi209
Możesz dodawać np. liczbę kontrolną na końcu ciągu, po zakodowaniu odpowiednio ją obliczyć i dokleić, potem po drugiej stronie wystarczy sprawdzić czy liczba kontrolna jest poprawna.
Crozin
Opisz dokładnie cały problem. Póki co wiemy, że chcesz coś (de)kodować, sprawdzać poprawność / autentyczność, ale to są tylko jakieś hasła oderwane od rzeczywistości. Napisz konkretnie co i dlaczego chcesz kodować, jakie są te kryteria - jeśli nie będziesz tego w stanie tak opisać podaj jakiś przykład ilustrujący całość problemu. Wtedy będziemy mogli powiedzieć Ci jak się za to zabrać, z czego skorzystać - teraz jak sam widzisz dostajesz "durne" linki, bo nie da się nic więcej napisać.
Elber
Mam sobie stronkę w której mam panel admina....takich stronek bede miał kilka ... ten sam skrypt smile.gif I chcę zrobić jeden główny panelik w którym będę dodawał te wszystkie moje stronki i obok danych tej stronki chcę zrobić przycisk po którym jak wcisnę przeniesie mnie do panelu admina danej stronki i tam będzie się już zalogowanym smile.gif Żeby to było bezpieczne to chcę dane przesyłać postem, w z góry zadeklarowanej zmennej np. $_POST['super_zmienna'] a w zawartości tej zmiennej chcę dać ciąg znaków (coś zakodowane) i chciałbym aby za każdym razem ten ciąg był inny (czyli nie że cały czas przesyłam ten sam klucz) i to leciało by do pliku login.php w danej stronie i tam odebrało tą zmienną i zdekodowało i jakby się zgadzało że ten ciąg jest taki jak być powinien (czyli tutaj jakieś dekodowanie tego) to ustawi sesje na zlogowany i przeniesie do panelu admina biggrin.gif

Nikt nie ma pomysłu żadnego ?
Crozin
1. Cała komunikacja pomiędzy serwerami powinna być szyfrowana (SSL).
2. Raczej będzie musiał istnieć jakiś prywatny klucz znany tylko przez Twój panel i aplikację klienta na podstawie którego będzie dochodziło do uwierzytelniania. Zauważ, że takie rozwiązanie jest stosowane przez wszystkich (Google, Facebook, Microsoft itd.) gdy potrzeba komunikacji na linii strona giganta <-> czyjaś strona.
Elber
Zrobiłem tak że wysyłam $_POST'em liczbę 11 cyfr, koduję ją w :
  1. function KodujKlucz($value){
  2. $key = "top secret";
  3. $text = $value;
  4. $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
  5. $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
  6. $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv);
  7. return $crypttext;
  8. }


jednak jak sprawdzam var_dump w skrypecie po zakodowaniu to string ma 32 znaki a w skrypcie do którego poleciał ten kod to ma za każdym razem inną liczbę znaków, zawsze większą niż 32 i przez to nie da się tego rozkodować ... co robię źle ?
mls
  1. return base64_encode($crypttext);

i oczywiście base64_decode po drugiej stronie, przed zdekodowaniem...
Elber
Funkcja dekodująca wygląda tak:

  1. function DekodujKlucz($value){
  2. $key = "top secret";
  3. $crypttext = (float)$value;
  4. $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
  5. $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
  6. $decrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $crypttext, MCRYPT_MODE_ECB, $iv);
  7. return trim($decrypttext);
  8. }


I jak dałem to base64_encode i base64_decode to wysyła postem ten sam fragment kodu, jednak nie działa rozkodowanie ...
Niktoś
A czy ta funkcja kodująca nie zwraca czasami cyfry i litery?Bo ja tu widzę jakieś rzutowanie na float przy dekodowaniu:
$crypttext = (float)$value;
Może to będzie powodowało błąd ,ale pewności nie mam.
Elber
Wszystko działa smile.gif Wczoraj było już późno i mój mózg nie funkcjonował tak jak powinien smile.gif Jest OK dzięki smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.