Tworzymy grę, część 7: Kodowanie i hashowanie

Mateusz Nowak
05.09.2015

VII - Kodowanie i hashowanie

Mamy już nawet statystyki gracza, ale co z tego skoro hasła do kont dla osoby bardziej obeznanej z internetem są na wyciągnięcie ręki? W języku php istnieje kilka rodzajów kodowań. Najbardziej popularne to md5. Zaraz za nim stoi sha1.

1. Md5
Md5 to bardzo prosta a zarazem popularna funkcja. Jest to najpopularniejsza metoda szyfrowania haseł w internecie. Jeszcze niedawno była niemożliwa do odkodowania. Dziś istnieje jednak sposób na odkodowanie hash'a md5 (nie ma jednak 100% pewności, że odkodowany wyraz będzie taki sam jak przed zakodowaniem). Funkcję wywołujemy w następujący sposób

<?php
  $hash = md5("Vielta"); // Kodujemy wyraz Vielta i przypisujemy go   do zmiennej $hash
  echo $hash; // Wyświetlamy zakodowany wyraz Vielta
  ?>

Jak więc tego używać przy tworzeniu gry? Hasła w bazie danych można zapisywać właśnie używając funkcji md5. Aby tego dokonać trzeba zmienić typ pola `password` w tabeli `konta` z 'text' na 'varchar' o długości 32, gdyż na 32 znaki kodowane są wyrazy przy md5. Następnie w każdym miejscu gdzie sprawdzany jest login gracza trzeba użyć md5. Sprawdzenie hasła będzie więc wyglądało tak:

<?php
  $password = $_POST['pass']; // Pod zmienną password przypisujemy to co   zostało wpisane w polu tekstowym pass (czy password zależnie jaką ma nazwę).
  $password = md5($password); // Kodujemy hasło
  ?>

Następnie wszystko wygląda tak samo jak w kodzie z 2giego rodziału - logowanie. Jeśli chcemy użyć md5 będziemy musieli użyć tego także przy rejestracji. Skrypt będzie wyglądał tak sam jak ten w 3cim rozdziale jednak będziemy musieli do niego dodać to samo co do skryptu rejestracji.

Składnia funkcji md5 wygląda następująco:
string md5 ( string $str [, bool $raw_output] );
wynika z tego, że opcjonalnie funkcja przybiera wartość $raw_output. Jeśli jest ona ustawiona znaki konwertowane są w ciągi 16 znakowe a nie 32.

2. Sha1
Jest to funkcja o wiele rzadziej używana przy kodowaniu, czy jest mniej bezpieczna - nie wiem, gdyż sam używam funkcji md5. Działa ona bardzo podobnie, używa jednak nieco innego hasha, a co za tym idzie koduje nie na 32 znaki tylko aż na 40 znaków. Użycie funkcji wygląda identycznie jak przy md5. Jedyną różnicą jest napisanie sha1 zamiast md5 czyli

<?php
  $hash = sha1("Vielta");
  echo $hash;
?>
Zgłoś swój pomysł na artykuł

Więcej w tym dziale Zobacz wszystkie