PHP/Szyfrowanie

< PHP

KodowanieEdytuj

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.");
?>


HashowanieEdytuj

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 hashEdytuj

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/rejestracjiEdytuj

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ł.