541 Stimmen

Grundlegender Unterschied zwischen Hashing- und Verschlüsselungsalgorithmen

Ich sehe eine Menge Verwirrung zwischen Hashes und Verschlüsselungsalgorithmen und würde gerne mehr Expertenrat dazu hören:

  1. Wann Hashes und wann Verschlüsselungen verwendet werden sollten

  2. Was macht einen Hash- oder Verschlüsselungsalgorithmus aus (theoretisch/mathematisch) d.h. was macht Hashes unumkehrbar (ohne Hilfe eines Regenbogenbaums)

Hier sind einige ähnlich SO Fragen, die nicht so sehr ins Detail gehen, wie ich es gesucht habe:

Was ist der Unterschied zwischen Obfuscation, Hashing und Encryption?
Unterschied zwischen Verschlüsselung und Hashing

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 .

20voto

Julian Punkte 3697

A Hash-Funktion verwandelt eine Textmenge mit variabler Größe in eine Textmenge mit fester Größe.

Hash

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. enter image description here

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)

13voto

Vahid Farahmandian Punkte 5535

Symmetrische Verschlüsselung:

Die symmetrische Verschlüsselung kann auch als Shared-Key- oder Shared-Secret-Verschlüsselung bezeichnet werden. Bei der symmetrischen Verschlüsselung wird ein einziger Schlüssel sowohl zur Verschlüsselung als auch zur Entschlüsselung des Datenverkehrs verwendet.

enter image description here

Asymmetrische Verschlüsselung:

Die asymmetrische Verschlüsselung wird auch als Public-Key-Kryptographie bezeichnet. Die asymmetrische Verschlüsselung unterscheidet sich von der symmetrischen Verschlüsselung vor allem dadurch, dass zwei Schlüssel verwendet werden: einer für die Verschlüsselung und einer für die Entschlüsselung. Der häufigste asymmetrische Verschlüsselungsalgorithmus ist RSA .

Im Vergleich zur symmetrischen Verschlüsselung ist die asymmetrische Verschlüsselung mit einem hohen Rechenaufwand verbunden und in der Regel sehr viel langsamer. Daher wird sie normalerweise nicht zum Schutz von Nutzdaten eingesetzt. Ihre größte Stärke ist stattdessen die Fähigkeit, einen sicheren Kanal über ein unsicheres Medium (z. B. das Internet) aufzubauen. Dies wird durch den Austausch öffentlicher Schlüssel erreicht, die nur zur Verschlüsselung von Daten verwendet werden können. Der komplementäre private Schlüssel, der niemals weitergegeben wird, wird zur Entschlüsselung verwendet.

enter image description here

Hashing:

Schließlich ist das Hashing eine Form der kryptografischen Sicherheit, die sich von der Verschlüsselung unterscheidet. Während die Verschlüsselung ein zweistufiger Prozess ist, bei dem eine Nachricht erst verschlüsselt und dann entschlüsselt wird, wird beim Hashing eine Nachricht in einen irreversiblen Wert mit fester Länge (Hash) umgewandelt. Zwei der gebräuchlichsten Hash-Algorithmen, die in Netzwerken verwendet werden, sind MD5 y SHA-1 .

enter image description here

Lesen Sie hier mehr: http://packetlife.net/blog/2010/nov/23/symmetric-asymmetric-encryption-hashing/

6voto

hvgotcodes Punkte 114342
  1. Verwenden Sie Hashes, wenn Sie nur in eine Richtung gehen müssen. Bei Passwörtern in einem System beispielsweise verwenden Sie Hashes, weil Sie nur überprüfen wollen, ob der von einem Benutzer eingegebene Wert nach dem Hashing mit dem Wert in Ihrem Repository übereinstimmt. Bei der Verschlüsselung können Sie zwei Wege gehen.

  2. Hashing-Algorithmen und Verschlüsselungsalgorithmen sind lediglich mathematische Algorithmen. In dieser Hinsicht unterscheiden sie sich also nicht - es sind alles nur mathematische Formeln. In semantischer Hinsicht gibt es jedoch einen großen Unterschied zwischen Hashing (Einweg) und Verschlüsselung (Zweiweg). Warum sind Hashes unumkehrbar? Weil sie so konzipiert sind, weil man manchmal eine Einweg-Operation haben möchte.

5voto

ayush Punkte 13870

Wenn es um die Sicherheit bei der Übertragung von Daten geht, d.h. bei der Zwei-Wege-Kommunikation, wird Verschlüsselung verwendet.

Wenn es um die Autorisierung geht, verwenden Sie Hashing, das keinen Schlüssel enthält.

Beim Hashing wird aus einer beliebigen Menge von Daten (binär oder Text) ein Hash mit konstanter Länge erstellt, der eine Prüfsumme für die Daten darstellt. Der Hashwert kann beispielsweise 16 Byte betragen. Verschiedene Hashing-Algorithmen erzeugen Hashes unterschiedlicher Größe. Sie können die ursprünglichen Daten natürlich nicht anhand des Hashwerts wiederherstellen, aber Sie können die Daten erneut hashen, um zu sehen, ob derselbe Hashwert erzeugt wird. Einweg-Passwörter auf Unix-Basis funktionieren auf diese Weise. Das Kennwort wird als Hash-Wert gespeichert, und um sich bei einem System anzumelden, wird das eingegebene Kennwort gehasht und der Hash-Wert mit dem Hash-Wert des echten Kennworts verglichen. Wenn sie übereinstimmen, haben Sie das richtige Passwort eingegeben.

Warum ist Hashing unumkehrbar?

Hashing ist nicht umkehrbar, da die Zuordnung von Eingabe zu Hash nicht 1 zu 1 ist. Wenn zwei Eingaben auf denselben Hash-Wert abgebildet werden, spricht man gewöhnlich von einer "Hash-Kollision". Für Sicherheitszwecke ist eine der Eigenschaften einer "guten" Hash-Funktion, dass Kollisionen in der Praxis selten vorkommen.

5voto

Justin Morgan Punkte 2417

Verschlüsselungs- und Hash-Algorithmen funktionieren auf ähnliche Weise. In beiden Fällen ist es notwendig, eine Verwirrung und Diffusion zwischen den Bits. Gekocht, Verwirrung eine komplexe Beziehung zwischen dem Schlüssel und dem Chiffretext herstellt und Diffusion die Informationen der einzelnen Bits weitergibt.

Viele Hash-Funktionen verwenden eigentlich Verschlüsselungsalgorithmen (oder Primitive von Verschlüsselungsalgorithmen). Zum Beispiel ist der SHA-3-Kandidat Strang verwendet Threefish als zugrunde liegende Methode zur Verarbeitung der einzelnen Blöcke. Der Unterschied besteht darin, dass die einzelnen Blöcke des verschlüsselten Textes nicht aufbewahrt, sondern destruktiv und deterministisch zu einer festen Länge zusammengefügt werden

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X