Hashing ist eine Einwegfunktion (also ein Mapping). Es ist irreversibel, Sie wenden den sicheren Hash-Algorithmus an und können die ursprüngliche Zeichenfolge nicht zurückerhalten. Das Beste, was Sie tun können, ist, eine sogenannte "Kollision" zu generieren, dh eine andere Zeichenfolge zu finden, die denselben Hash bereitstellt. Kryptografisch sichere Hash-Algorithmen sollen das Auftreten von Kollisionen verhindern. Sie können einen sicheren Hash mithilfe einer Regenbogentabelle angreifen , der Sie entgegenwirken können, indem Sie vor dem Speichern ein Salz auf den Hash auftragen.
Die Verschlüsselung ist eine ordnungsgemäße (bidirektionale) Funktion. Es ist reversibel. Sie können die entstellte Zeichenfolge entschlüsseln, um die ursprüngliche Zeichenfolge zu erhalten, wenn Sie den Schlüssel haben.
Die unsichere Funktion, auf die es sich bezieht, besteht darin, dass bei der Verschlüsselung der Kennwörter in Ihrer Anwendung der Schlüssel irgendwo gespeichert ist und ein Angreifer, der Zugriff auf Ihre Datenbank (und / oder den Code) erhält, die ursprünglichen Kennwörter erhalten kann, indem er sowohl den Schlüssel als auch den verschlüsselten Text abruft , während es mit einem Hash unmöglich ist.
Die Leute sagen normalerweise, wenn ein Cracker Ihre Datenbank oder Ihren Code besitzt, braucht er kein Passwort, daher ist der Unterschied umstritten. Dies ist naiv, da Sie immer noch die Pflicht haben, die Passwörter Ihrer Benutzer zu schützen, vor allem, weil die meisten von ihnen immer wieder dasselbe Passwort verwenden, wodurch sie einem größeren Risiko ausgesetzt sind, indem sie ihre Passwörter verlieren.