Passwort encrypten
-
Ich empfehle einen MD5-Hash zu benutzen, siehe http://fatman98.fa.funpic.de/builder_crypt.php
-
Also ich benutzte eigentlich immer einen SHA512 hash.
Weil für md5 gibts ja schon tabellen, wo viele hashwerte drinnestehen.
-
dfgdfg schrieb:
Also ich benutzte eigentlich immer einen SHA512 hash.
Code?
dfgdfg schrieb:
Weil für md5 gibts ja schon tabellen, wo viele hashwerte drinnestehen.
Link?
-
SHA512:
http://rafb.net/p/vAoJDB19.html
-
also MD5 und ähnliches ist für meinen Fall totaler overkill. Werde wohl die Rot13 function von dem von f98 geposteten link benutzen.
Eine andere Frage die sich mir nun gestellt hat, ist, wo ich denn das Passwort abspeichere. Einfach in eine Ini rein ist ja blöd, selbst wenn verschlüsselt. Andere Möglichkeit wär in die Registry rein...gibt es da evtl ein Pfad für Passwörter?
-
streetch schrieb:
also MD5 und ähnliches ist für meinen Fall totaler overkill. Werde wohl die Rot13 function von dem von f98 geposteten link benutzen.
Eine andere Frage die sich mir nun gestellt hat, ist, wo ich denn das Passwort abspeichere. Einfach in eine Ini rein ist ja blöd, selbst wenn verschlüsselt. Andere Möglichkeit wär in die Registry rein...gibt es da evtl ein Pfad für Passwörter?Deine "andere Frage" belegt, dass Deine erste Einschätzung falsch ist. :p

Ich wette mit Dir, dass Du viel schneller den o.a. Code für die Hashfunktionen eingebunden hast als mit irgendwelchen OS-spezifischen Funktionen "Pseudosicherheit" erzeugt.Mein Tipp: Nimm die Hashfunktion und schreib den PW-Hash in die IniDatei.
Geht schneller und ist sicherer.Gruß,
Simon2.
-
dgcfgdgd schrieb:
SHA512:
http://rafb.net/p/vAoJDB19.htmlDanke! Gibts da auch ein Anwendungsbeispiel dafür?
dgcfgdgd schrieb:
Interessant.
-
Anwendugsbeispiel(so benutzte ich's):
LPCWSTR lpPassword = L"TOTOTOTO"; BYTE digest[64]; Sha512 sh; sh.Update((BYTE*)lpPassword, (DWORD)wcslen(lpPassword) * 2 + 2); sh.Final(digest);Und schon hat man den hash wert.
Für die größe vom hash kannst du SHA512_DIGEST_SIZE benutzen.
-
ertert schrieb:
Für die größe vom hash kannst du SHA512_DIGEST_SIZE benutzen.
Verstehe ich jetzt nicht ganz im Zusammenhang mit dem Anwendungsbeispiel. Und wieso wird die Passwortlänge *2+2 gerechnet?
-
Die Update funktion erwartet bytes, wcslen gibt aber die länge in wchar_t zurück.
Und da die 2 groß sind(besser sizeof(wchar_t)) nehme ich die länge des texts mal 2 und addiere noch 2 für den null char am ende.BYTE diges[SHA512_DIGEST_SIZE];
so kann man auch SHA256_DIGEST_SIZE etc. benutzten, und muss nicht die länge in bytes ausrechnen.
-
Ok, und den Kauderwelsch, der in digest steht muß man dann noch in Hex wandeln?
-
std::string bignum_to_string (bignum const& n) { std::ostringstream os; os.width (2); os.fill ('0'); BOOST_FOREACH(unsigned byte, n) { os << std::hex << byte; } return os.str (); } template <typename Iterator> unsigned char read_byte (Iterator& i) { unsigned char c = *i++; unsigned char result = (c < 'a' ? c - '0' : c - 'a' + 10) * 16; c = *i++; return result + (c < 'a' ? c - '0' : c - 'a' + 10); } bignum string_to_bignum (std::string const& s) { bignum result; std::string::const_iterator i = s.begin (); BOOST_FOREACH(unsigned char& b, result) { b = read_byte (i); } return result; }So mach ich das. bignum ist einfach ein sehr schmal gekapseltes Array (soll heißen es bietet begin und end). BOOST_FOREACH muss man auch nicht benutzen. read_byte geht sicherlich schöner (und portabler), aber für den Anfang tuts das auch ;).
-
Vielleicht wäre ja auch hashlib++ eine alternative.
Im moment werden zwar nur MD5 und SHA1 unterstützt, aber dafür ist die Sache sehr einfach zu handhaben.
-
falls du die volle packung brauchst nimm www.cryptopp.com. einbinden, in deinem fall zwei zeilen code schreiben - fertig.
@md5: gilt immer noch als nicht geknackt. es treten lediglich kollisionen auf. für anwendungen wo es nicht wirklich drauf ankommt immer noch völlig in ordnung. sha etc. sind natürlich sicherer und auch nicht schwieriger zu verwenden,.
-
ertert schrieb:
Anwendugsbeispiel(so benutzte ich's):
LPCWSTR lpPassword = L"TOTOTOTO"; BYTE digest[64]; Sha512 sh; sh.Update((BYTE*)lpPassword, (DWORD)wcslen(lpPassword) * 2 + 2); sh.Final(digest);Und schon hat man den hash wert.
Für die größe vom hash kannst du SHA512_DIGEST_SIZE benutzen.Kann mir jemand sagen wie ich BYTE in char* oder System::String o.Ä. bekomme?
-
BYTEist in der Regelcharoderunsigned char.greetz, Swordfish
-
BYTE ist in der Regel wohl unsigned char (0 ... 255) ...
-
Ist mir inzeischen auch wieder eingefallen, bringt mich leider nicht weiter:
Wenn ich den Hash von Teststring bilde erhalte ich mitchar* hashChar = (char*)hash;(hash ist ein BYTE Wert) σá5~︽ñT(PÖm€Ö äW܃ô
!ÓléÎGÐÑ<]…ò°ÿƒÒ‡~ì/c¹1½GAz¥82zù'Ú>Å#G„¨J, ich brauche das ganze aber als Hexwert, das wäre dann bei SHA512 0226198a38c58db0f43f845549a11e1a3c323400dfd00fb5df25fbf97c5fed6fc90bc383a17d26de5bdea367369afc7ccd7fa7234052c67fc1a1fe83daf21c0e
-
Den Zahlenwert eines Bytes hexadezimal ausgeben:
unsigned char my_char = 123; stringstream ss; ss << hex << static_cast<unsigned int>(my_char>; cout << ss.str() << endl;Alternativ auch gleich in einen beliebigen Stream reinstreamen, ohne den Umweg über den stringstream.