PHP/Szyfrowanie

Z Wikibooks, biblioteki wolnych podręczników.
< PHP

Kodowanie[edytuj]

PHP udostępnia możliwość kodowania co jest procesem obustronnym - dane można zarówno zakodować jak i zdekodować. Przykładowymi funkcjami kodującymi są base64.

  • base64_encode - koduje ciąg
  • base64_decode - dekoduje ciąg
<?php
$tekst = "Przykładowy tekst z różnymi znakami specjalnymi @#$ do zakodowania.";

$zakodowane = base64_encode($tekst);
echo($zakodowane);
// UHJ6eWuzYWRvd3kgdGVrc3QgeiBy879ueW1pIHpuYWthbWkgc3BlY2phbG55bWkgQCMkIGRvIHpha29kb3dhbmlhLg==

$zdekodowane = base64_decode($zakodowane);
echo($zdekodowane);
// Przykładowy tekst z różnymi znakami specjalnymi @#$ do zakodowania.

if($tekst == $zdekodowane)
  echo("Wszystko w porządku.");
?>


Hashowanie[edytuj]

Ponadto języku PHP dane można również hashować (w odróżnieniu od szyfrowania jest to proces jednostronny) używając do tego specjalnych funkcji.

<?php
$form = $_POST['formularz'];
$hash = sha1($form);
echo ($hash);
?>

Powyżej przedstawiony jest skrypt hashujący dane odbierane z formularza POST. Funkcji tej można używać np. do hashowania haseł użytkowników, w skrypcie rejestracji, tak by nie dały się rozszyfrować.

Funkcje hashujące

  • sha1
  • md5
  • hash
  • crc32
  • crypt

W przypadku hashowania plików zazwyczaj wymagane jest użycie innej funkcji. Najczęściej wystarczy dodać "_file" (np. md5_file) jednak nie jest to reguła. Zaleca się unikać hashowania dużych plików gdyż operacja ta może znacznie obciążyć maszynę, na której uruchomiony zostanie ów skrypt.

Funkcja hash[edytuj]

Funkcja hash służy do hashowania ciągów znaków. Przyjmuje ona trzy parametry - dwa obowiązkowe i trzecie opcjonalny:

  • $algo - string - oznacza algorytm, którym chcemy użyć do zahashowania ciągu. Aby poznać listę obsługiwanych algorytmów, możemy skorzystać z bezparametrowej funkcji hash_algos;
  • $data - string - jest to ciąg znaków, które chcemy zhashować;
  • $raw_output - bool, domyślnie false - określa czy chcemy otrzymać wynik w postaci czystego stringu, czy w postaci binarnej.

Przykład:

<?php
$string = 'Przykładowy tekst do hashowania.';
$hash['sha1'] = hash('sha1', $string);
$hash['sha256'] = hash('sha256', $string);
$hash['md5'] = hash('md5', $string);
$hash['ripemd128'] = hash('ripemd128', $string);
$hash['snefru'] = hash('snefru', $string);

var_dump($hash);
?>

Wynik działania powyższego kodu:

array(5) {
  ["sha1"]=>
  string(40) "e157526e4ef49809c68b3b00cfa6493d09349932"
  ["sha256"]=>
  string(64) "82b02eea215044a86841a7f1e0e0f2637b97f7fde45e9ea49df1afb08ea6e7fe"
  ["md5"]=>
  string(32) "277f81378540c45fe961e377e974594e"
  ["ripemd128"]=>
  string(32) "57339c372fe11ce3a2a6a2f3e860aed6"
  ["snefru"]=>
  string(64) "4a7762591db868359b7486aa4ab8494117bd71075d31143666911ea45cb9b8a9"
}

Wykorzystanie hashowania w logowaniu/rejestracji[edytuj]

Wykorzystanie hashowania jest niezwykle proste. Przy rejestracji, należy zahashować hasło i dodać je w takiej formie do bazy danych. Wtedy przy logowaniu, musimy zahashować hasło i porównać go z rekordem w bazie danych.

Ta prosta metoda nie zapewnia jednak wysokiego bezpieczeństwa dla haseł.