Passwordspeicherung in der Datenbank (gelöst)

Alles rund um die Programmierung mit Qt
Antworten
Roedi
Beiträge: 4
Registriert: 12. Juli 2010 11:38

Passwordspeicherung in der Datenbank (gelöst)

Beitrag 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.
Zuletzt geändert von Roedi am 12. Juli 2010 14:20, insgesamt 1-mal geändert.
Mani99
Beiträge: 244
Registriert: 15. April 2009 10:46
Wohnort: München

Re: Passwordspeicherung in der Datenbank

Beitrag 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?
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag 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 ...
Zuletzt geändert von RHBaum am 12. Juli 2010 14:08, insgesamt 2-mal geändert.
Roedi
Beiträge: 4
Registriert: 12. Juli 2010 11:38

Beitrag 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.
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

QByteArray::toHex()?
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

QByteArray::toHex()?
Aehm ja danke ....

glaub ich muss mal nen Optiker aufsuchen :-)

Ciao ...
Roedi
Beiträge: 4
Registriert: 12. Juli 2010 11:38

Beitrag von Roedi »

das mit dem .toHex(); klappt.
super Danke!
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

Steht sogar in der Doku zu QCryptographicHash::result() drin ;)
Antworten