Seite 1 von 1

Passwordspeicherung in der Datenbank (gelöst)

Verfasst: 12. Juli 2010 12:58
von Roedi
Hallo zusammen,

Ich möchte gerne ein Password in einer Datenbank abspeichern. Das zu speichernde Password hashe ich gleich in in dem Programm

Code: Alles auswählen

QVariant qvPW(qle2->text());
QByteArray qbaPW = qvPW.toByteArray();
QCryptographicHash* qchPW = new QCryptographicHash(QCryptographicHash::Md5);
qchPW->addData(qbaPW);
QByteArray qbaPWh = qchPW->result();
qDebug() << qbaPWh;
QVariant qvPWh(qbaPWh);
QString qsPWh = qvPWh.toString();
qDebug() << qsPWh;
i=SQLQuery::addUser((qle1->text()), qsPWh, 1);
Das Hashen funktioniert soweit einwandfrei, wenn ich jetzt allerdings den gehashten wert in der Datenbank speichere wird dieser verändert. Ein einfaches Beispiel hierzu:
das Password ist 1234
daraus wird der gehashte Wert: abr!p*+#?
wenn ich den nun wiederum in die Datenbank gebe wird daraus: abr!p~+#?
jetzt leicht übertrieben, dies ist tritt bei Sonderzeichen vor allem auf.
Lässt sich das vermeiden?

Danke im voraus für Antworten.

Re: Passwordspeicherung in der Datenbank

Verfasst: 12. Juli 2010 13:45
von Mani99
Roedi hat geschrieben: Das Hashen funktioniert soweit einwandfrei [...]

[...]dies ist tritt bei Sonderzeichen vor allem auf.
Wäre neu, das md5 sonderzeichen erzeugt. Du solltest die hash-funktion überprüfen.

Zur datenbank, worin speicherst du den hash?

Verfasst: 12. Juli 2010 13:59
von RHBaum
Wäre neu, das md5 sonderzeichen erzeugt
Nen Crypt Algo erzeugt gar keine Zeichen.
Der Hash iss ein Feld auf Bytes, wo theorethisch alles drinne stehen kann, über sonderzeichen bis 0
(Was impliziet bedeutet, das man Hashs Nicht direkt in Textfelder speichern sollte, sondern entweder den rohen hash in blobs (was die abfragen compliziert macht) oder die Hashs generell in ne Stringform umwandeln).

Die Frage iss nur: wie stellt man nen bytefeld dar ?
Also QString::QString ( const QByteArray & ba ) funktioniert nur, wenn in dem ByteArray nen C-String drinnesteht, und das tuts ned.
DU musst das ByteArray also in ne reinterpretiertbare Stringform (meistens Octet schreibweisse)umwandeln.
Dacht eigentlich da gibts was fertiges, aber find grad nix fuer QString und QbyteArray.
Base64 sollt aber auch gehen ...


Ciao ...

Verfasst: 12. Juli 2010 14:04
von Roedi
ich speichere den Hash zuerst in einem QByteArray (QByteArray qbaPWh = qchPW->result(); )
und danach über ein QVariant in einen QString, welchen ich dann an das sqlquery übergebe.

Verfasst: 12. Juli 2010 14:07
von pfid
QByteArray::toHex()?

Verfasst: 12. Juli 2010 14:10
von RHBaum
QByteArray::toHex()?
Aehm ja danke ....

glaub ich muss mal nen Optiker aufsuchen :-)

Ciao ...

Verfasst: 12. Juli 2010 14:20
von Roedi
das mit dem .toHex(); klappt.
super Danke!

Verfasst: 12. Juli 2010 14:55
von pfid
Steht sogar in der Doku zu QCryptographicHash::result() drin ;)