A Hash-Funktion verwandelt eine Textmenge mit variabler Größe in eine Textmenge mit fester Größe.
Quelle: https://en.wikipedia.org/wiki/Hash_function
Hash-Funktionen in PHP
Ein Hash verwandelt eine Zeichenkette in eine gehashte Zeichenkette. Siehe unten.
HASH:
$str = 'My age is 29';
$hash = hash('sha1', $str);
echo $hash; // OUTPUT: 4d675d9fbefc74a38c89e005f9d776c75d92623e
Passwörter werden in der Regel in ihrer Hash-Darstellung und nicht als lesbarer Text gespeichert. Wenn ein Endbenutzer Zugang zu einer passwortgeschützten Anwendung erhalten möchte, muss er bei der Authentifizierung ein Passwort angeben. Wenn der Benutzer sein Kennwort eingibt, empfängt das gültige Authentifizierungssystem das Kennwort und hasht das gegebene Kennwort. Dieser Passwort-Hash wird mit dem dem System bekannten Hash verglichen. Bei Gleichheit wird der Zugang gewährt.
DEHASH:
SHA1 ist ein einseitiger Hash. Das bedeutet, dass man den Hash nicht dehashen kann.
Sie können den Hash jedoch mit Gewalt erzwingen. Siehe bitte: https://hashkiller.co.uk/sha1-decrypter.aspx .
MD5, ist ein weiterer Hashwert. Ein MD5-Dehasher kann auf dieser Website gefunden werden: https://www.md5online.org/ .
Um Brute-Force-Angriffe auf Hashes zu erschweren, kann ein Salt angegeben werden. In php können Sie verwenden password_hash()
zur Erstellung eines Passwort-Hashes. Die Funktion password_hash()
erstellt automatisch ein Salz. Um ein Passwort anhand eines Passwort-Hashes (mit einem Salt) zu überprüfen, verwenden Sie password_verify()
.
// Invoke this little script 3 times, and it will give you everytime a new hash
$password = '1234';
$hash = password_hash($password, PASSWORD_DEFAULT);
echo $hash;
// OUTPUT
$2y$10$ADxKiJW/Jn2DZNwpigWZ1ePwQ4il7V0ZB4iPeKj11n.iaDtLrC8bu
$2y$10$H8jRnHDOMsHFMEZdT4Mk4uI4DCW7/YRKjfdcmV3MiA/WdzEvou71u
$2y$10$qhyfIT25jpR63vCGvRbEoewACQZXQJ5glttlb01DmR4ota4L25jaW
Ein Passwort kann durch mehr als einen Hash repräsentiert werden. Wenn Sie das Kennwort mit verschiedenen Kennwort-Hashes verifizieren, indem Sie password_verify()
dann wird das Passwort als gültiges Passwort akzeptiert.
$password = '1234';
$hash = '$2y$10$ADxKiJW/Jn2DZNwpigWZ1ePwQ4il7V0ZB4iPeKj11n.iaDtLrC8bu';
var_dump( password_verify($password, $hash) );
$hash = '$2y$10$H8jRnHDOMsHFMEZdT4Mk4uI4DCW7/YRKjfdcmV3MiA/WdzEvou71u';
var_dump( password_verify($password, $hash) );
$hash = '$2y$10$qhyfIT25jpR63vCGvRbEoewACQZXQJ5glttlb01DmR4ota4L25jaW';
var_dump( password_verify($password, $hash) );
// OUTPUT
boolean true
boolean true
boolean true
Eine Verschlüsselungsfunktion verwandelt einen Text mit Hilfe eines Verschlüsselungscodes in einen unsinnigen Chiffretext und umgekehrt.
Quelle: https://en.wikipedia.org/wiki/Encryption
Verschlüsselung in PHP
Schauen wir uns den PHP-Code für die Verschlüsselung an.
--- Die Mcrypt-Erweiterung ---
ENKRYPT:
$cipher = MCRYPT_RIJNDAEL_128;
$key = 'A_KEY';
$data = 'My age is 29';
$mode = MCRYPT_MODE_ECB;
$encryptedData = mcrypt_encrypt($cipher, $key , $data , $mode);
var_dump($encryptedData);
//OUTPUT:
string '„Ùòyªq³¿ì¼üÀpå' (length=16)
DECRYPT:
$decryptedData = mcrypt_decrypt($cipher, $key , $encryptedData, $mode);
$decryptedData = rtrim($decryptedData, "\0\4"); // Remove the nulls and EOTs at the END
var_dump($decryptedData);
//OUTPUT:
string 'My age is 29' (length=12)
--- Die OpenSSL-Erweiterung ---
Die Mcrypt-Erweiterung wurde in 7.1. veraltet und in php 7.2. entfernt. Die OpenSSL-Erweiterung sollte in php 7 verwendet werden. Siehe die untenstehenden Codeschnipsel:
$key = 'A_KEY';
$data = 'My age is 29';
// ENCRYPT
$encryptedData = openssl_encrypt($data , 'AES-128-CBC', $key, 0, 'IV_init_vector01');
var_dump($encryptedData);
// DECRYPT
$decryptedData = openssl_decrypt($encryptedData, 'AES-128-CBC', $key, 0, 'IV_init_vector01');
var_dump($decryptedData);
//OUTPUT
string '4RJ8+18YkEd7Xk+tAMLz5Q==' (length=24)
string 'My age is 29' (length=12)
31 Stimmen
Ich kann mir vorstellen, dass dies die Frage, auf die sich die Leute beziehen können, wenn sie die Begriffe verwechseln :)
20 Stimmen
Hashing ist einseitig (kann nicht rückgängig gemacht werden), Verschlüsselung ist zweiseitig (kann entschlüsselt werden)
1 Stimmen
Hashes sind auch nützlich für die Indizierung großer Strukturen und Objekte, z. B. Dateien. Siehe Hash-Tabelle .
25 Stimmen
Hashing ist wie ein Fleischwolf. Man kann eine Kuh in einen Hamburger verwandeln, aber nicht umgekehrt.
0 Stimmen
Ich habe bemerkt, dass meine Frage bearbeitet wurde. Ich kannte schon immer die Unterschiede auf der obersten Ebene zwischen den beiden, war aber eher neugierig auf die Unterschiede auf der unteren/mathematischen Ebene :) Wie auch immer, viel guter Inhalt für SO! Vielen Dank dafür!