MD5 algo wieder entschlüsseln
-
Hallo
Habe diesen Code gefunden. Klappt auch soweit. Nun frage ich mich ob ich
diesen "Algo" auch wieder umkehren kann ?
Also aus0e698a8ffc1a0af622c7b4db3cb750cc
wird wieder
test01
lg Cosi
#include <windows.h> #include <stdio.h> char* md5(char *data, char *hash) { HCRYPTPROV c_prov; HCRYPTHASH c_hash; BYTE raw_hash[64]; DWORD len = sizeof(raw_hash); unsigned int i; if(CryptAcquireContext(&c_prov, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_SILENT) && CryptCreateHash(c_prov, CALG_MD5, 0, 0, &c_hash) && CryptHashData(c_hash, data, strlen(data), 0) && CryptGetHashParam(c_hash, HP_HASHVAL, raw_hash, &len, 0) && ((len * 2) + 1 <= 33)) { for(i=0;i<len;i++) { wsprintf(&hash[i * 2], TEXT("%02.2x"), raw_hash[i]); } } else { return NULL; } hash[33] = '\0'; return hash; } int main(void) { char hash[33]; printf("Original: %s \nMD5: %s\n","test01", md5("test01", hash)); return 0; }
PS: Wenn nötig nach WINAPI verschieben
-
Jein, also theoretisch vielleicht aber praktisch Nein. Wohl aber eher viel mehr Nein als Ja.
-
MD5 - Verschlüsselung ist afaik unumkehrbar.
-
omg, sinn und zweck sollte ja gerade sein, dass nicht auf die eingabe zurückgeschlossen werden kann.
-
Solange die Originalinformation kleiner als die erzeugte Summe ist, die Hashwerte in dem Bereich kollisionsfrei und Du den Endzustand des MD5- Generators kennst müßte das möglich sein.
Praktisch kennt man den Endzustand des Generators aber nicht - daran wird's scheitern.
-
Die Funktion ist nicht injektiv, also geht es nicht.
-
Nachdem es unendlich viele Möglichkeiten gibt, die zu diesem Hash führen können ist es nicht möglich mit Sicherheit *die* Lösung zu finden, höchstens *einen* möglichen Ursprungstext.
-
OK Danke
Wollte einen Text (50 Zeichen) ver bzw wieder entschlüsseln und bin da zufällig auf diesen Code gekommen.
Der verschlüsselte "Text" sollte nur aus Buchstaben und Zahlen sein und wenn möglich immer 16 Byte lang sein.
Vielleicht hat ja jemand einen Tip.
Cosi
-
Wie willst du denn 50 Zeichen (50 Byte?) auf 16 Byte verschlüsseln? Da brauchst du entweder einen passenden Text und Komprimierungsalgorithmus, oder es gehen zwangsweise Informationen verloren. Bei letzterem gibt es keine Möglichkeit das wieder herzustellen.
Ansonsten würde ich dir raten einen Verschlüsselungsalgo zu benutzen und keinen Hash-Algo, da das komplett verschiedene Anwendungsgebiete sind.
Wie wärs mit AES, Blowfish, Twofish, DES...?
-
Einen der vielen Verschlüsselungsalgorithmen (Wiki) verwenden und nicht einen Hash-Algo.
Außerdem ist dein "char hash[33];" um ein Char zu klein.