PHP/Szyfrowanie
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ł.