Ich möchte ein Passwort als SHA256 Hash in eine MySQL Datenbank speichern. Ich verwende zur Administration von MySQL phpmysql.
Ich habe folgendes MySQL Statement:
INSERT INTO TestUser (email, vorname, nachname, passwort) VALUES (‘peter@mueller.de’, ‘Peter’, ‘Mueller’, HASH(‘SHA256’, stringtoutf8(‘testPasswort’), 1));
Irgendwie meckert MySQL:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘(‘SHA256’, stringtoutf8(‘testPasswort’), 1))’ at line 1
Vllt. mukiert er sich über die Ausführung einer Funktion in einem Statement - z.B. durch zu tief verschachtelte Quotes. Ich würde “stringtoutf8()” testhalber mal als Variable auslagern, welche ich dann an das HASH-Statement übergebe.
Ich bin mir ziemlich sicher, dass stringtoutf8 keine gültige MySQL Funktion ist, ich finde sie in der Referenz nicht. Wenn ich es richtig sehe, ist SHA256 auch von MySQL nicht direkt unterstützt. Was würde dagegen sprechen, das Passwort in der Applikation zu hashen? Dann müsstest du auch nicht das Passwort im Plaintext noch einmal von der Anwendung zur Datenbank schicken.
Sehe ich auch so. HASH ist ein Schlüsselwort, das in der DDL Anwendung findet. Hier sind zwei Sprachen vermischt.
Das SQL Statement stammt nicht von mir, sondern aus einem Buch. Das Buch heißt ‘Workshop Java EE7, Seite 215’. Dort wird eine Beispielanwendung Schritt für Schritt aufgebaut. Allerdings bezieht sich das Buch auf eine H2 Datenbank. Ich hatte das Projekt schon umgesetzt, inklusive einer MySQL Datasource, musste dann mein System aufgrund eines Hardwareschadens neu aufsetzen.
Folgendes Statement lässt sich in MySQL eingeben:
INSERT INTO Organisator (email, vorname, nachname, passwort)
VALUES (‘peter@mueller.de’, ‘peter’, ‘mueller’, HEX(SHA2(‘testPasswort’,256)));
Allerdings erzeugt dieses Statement keinen SHA256 Hash. Der Hash ist irgendwie zu lang.