Passwort encrypten
-
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.