000
15.06.2018, 08:39 Uhr
Sandra39
|
Hallo,
ich soll ein Programm erstellen, welches eine Datei einliest und den Hash berechnet. Anschließend soll die Datei verändert werden. Das bedeutet, aus ¤ 100,- mach ¤ 200,-. Auch hier soll der Hash berechnet werden. Das funktioniert soweit. Das Problem ist jetzt, das ich das Markup der veränderten Datei so ändern soll, dass der gleiche Hash herauskommt. Um die Versuche zu reduzieren, soll ich nur die ersten vier Hex-Werte verwenden. Hat jemand eine Idee (Pseudocode), wie sowas zu realisieren ist? Hier die Funktion, die ich bis jetzt habe.
C++: |
void Mark_Up(const char *const argv[], mpz_class hash_value2, mpz_class hash_value) { cout<<endl;
ifstream document(argv[1], ios::in); string buffer, original;
ifstream document1(argv[2], ios::in); string faelschung, buffer_1;
while(!document.eof() && document.good()) { getline(document, buffer, '\0'); original = original + buffer; cout <<original<<endl; cout << "Hash - Original: " <<hash_value<<endl; cout <<endl; }
if(document.bad()) { cerr<< "Datei konnte nicht geoeffnet werden!"<<endl; exit(1); }
while(!document1.eof() && document1.good()) { getline(document1, buffer_1, '\0'); faelschung = faelschung + buffer_1; cout <<faelschung<<endl; cout << "Hash - Faelschung: " <<hash_value2<<endl; }
if(document1.bad()) { //Der C++ Programmierer, Ulrich Breymann, S. 421 cerr<< "Datei konnte nicht geoeffnet werden!"<<endl; exit(1); } document.close(); document1.close();
//while(hash_value2 != hash_value) { //faelschung.erase(remove(faelschung.begin(), faelschung.end(), '\t'), faelschung.end()); faelschung.erase(23, 1); faelschung.erase(29, 1); faelschung.erase(30, 1); faelschung.erase(29, 1); faelschung.erase(52, 1); faelschung.erase(52, 1); faelschung.erase(70, 1); string v = "v"; string s = "s"; faelschung.erase(59, 1); faelschung.replace(59, 0, s); faelschung.replace(70, 0, v); faelschung.erase(84, 1);
const char *const attack = faelschung.c_str();
cout<<endl; cout << "Dokument Faelschung: "<<endl; unsigned char hash[crypto_hash_sha512_BYTES]; const size_t message_length2 = strlen(attack); cout <<attack<<endl; cout << "Message length: " << dec <<message_length2 << " characters" << endl; cout << "Hash length: " << (8 * sizeof hash)-508 << " bits" << endl; crypto_hash_sha512(hash, (const unsigned char*)attack, message_length2);
cout << "Hash: " << hex; for(size_t k = 0; k < 2; k++) cout << setw(2) << setfill('0') <<(int)hash[k]; cout << endl; libsodium_to_GMP(hash, hash_value2); //} }
|
Dieser Post wurde am 15.06.2018 um 08:45 Uhr von Sandra39 editiert. |