myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Basistechnologien und allgemeine .NET-Klassen » Für alle möglichen Kombinationen Datei und MD5 Hash erzeugen
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Für alle möglichen Kombinationen Datei und MD5 Hash erzeugen

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
flo87
myCSharp.de-Mitglied

Dabei seit: 18.08.2019
Beiträge: 4


flo87 ist offline

Für alle möglichen Kombinationen Datei und MD5 Hash erzeugen

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Liebes Forum, ich bin ein Hobbyprogrammierer, der immer mal wieder kleinere Alltagsprobleme aus Interesse und zur Zeitersparnis programmiertechnisch umsetzen möchte.

Ausgangslage:
Ich habe mehrere Change-Dateien, die jeweils einige Offsets einer Datei ändern. Diese Dateien stehen als Ressource im Projekt zur Verfügung:

C#-Code:
byte[][] change = new byte[9][];
change[0] = Properties.Resources.change0;
change[1] = Properties.Resources.change1;
change[2] = Properties.Resources.change2;
change[3] = Properties.Resources.change3;

...

Ob ein Change angewendet wird, wird über Checkboxen in der Form vom Anwender ausgewählt. D. h. es gibt 20x Changes zur Auswahl mit jeweils 2 Zuständen (Change anwenden, Change nicht anwenden)
Change 1
[ ] nicht anwenden | [x] anwenden
Change 2
[x] nicht anwenden | [ ] anwenden
Change 3
[ ] nicht anwenden | [x] anwenden
...

Zum Anwenden dieser Changes gibt es bereits eine Methode, die auch funktioniert:

C#-Code:
ApplyChange(textBoxPath.Text, 0); // textBoxPath.Text ist die Zieldatei, auf die der Change angewendet wird | "0" die ChangeNummer

Ich benötige nun eine Methode, die jeweils alle möglichen Kombinationen anwendet sowie jeweils eine Datei und deren MD5 erzeugt. Mit diesen MD5-Werten möchte ich später gegenprüfen, ob die Changes korrekt angewendet wurden.

Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von flo87 am 18.08.2019 09:36.

18.08.2019 09:28 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.334
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

ist dir klar, daß du dann 2^20 = 1048576 Dateien erzeugst?
Technisch entspricht das dann 20 verschachtelten Schleifen mit jeweils den Werten 0 (false) und 1 (true) - oder alternativ per Rekursion.
18.08.2019 09:43 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
flo87
myCSharp.de-Mitglied

Dabei seit: 18.08.2019
Beiträge: 4

Themenstarter Thema begonnen von flo87

flo87 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Danke schon mal für diesen Hinweis, das war mir nicht bewusst. Die genannten 20 wäre die maximale Ausbaustufe - es sind aktuell weniger, aber trotzdem zeigt dein Beispiel wie schnell exponentiell die Anzahl wächst.

Dann ist es wahrscheinlich cleverer die MD5s im Speicher zu erzeugen. Das bekomme ich wahrscheinlich irgendwie hin, aber die Schleife nicht.
Hauptziel ist, die MD5s zu erzeugen, um diese im Programm zu hinterlegen.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von flo87 am 18.08.2019 10:16.

18.08.2019 10:15 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.334
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Warum willst du denn im voraus alle Kombinationen erzeugen? Reicht es nicht, nur für die vom Anwender gewählte Kombination die "Changes" durchzuführen (und per MD5 gegenzuchecken).
18.08.2019 10:28 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
flo87
myCSharp.de-Mitglied

Dabei seit: 18.08.2019
Beiträge: 4

Themenstarter Thema begonnen von flo87

flo87 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wenn die MD5s im Programm nicht hinterlegt sind, wie soll das Programm überprüfen, ob die Zieldatei korrekt erzeugt wurde?

Ich möchte alle Kombinationen vorab als MD5 erzeugen und hinterlegen, um das sicherzustellen.
18.08.2019 11:03 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
T-Virus T-Virus ist männlich
myCSharp.de-Mitglied

Dabei seit: 17.04.2008
Beiträge: 1.287
Entwicklungsumgebung: Visual Studio, Codeblocks, Edi
Herkunft: Nordhausen, Nörten-Hardenberg


T-Virus ist offline Füge T-Virus Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Bei der Menge an Dateien würde dis keinen Sinn machen, diese alle vorab erzeugen zu lassen.
Vermutlich verheizt du dann einige Zeit mit voller CPU Last.
Je nach Große der Dateien dürfte dann auch noch die Festplatte, falls du eine dafür verwendest, limitieren.
Hier sollten die Hashes erst erzeugt werden, wenn diese auch benötigt werden.

T-Virus
18.08.2019 11:16 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.334
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wäre es statt der MD5 dann nicht einfacher, nach dem Ändern der Zieldatei diese an den Offsets noch mal auszulesen und die Änderung abzutesten (wie es auch viele Kopierprogramme mittels Verifikation machen)?
18.08.2019 11:21 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
flo87
myCSharp.de-Mitglied

Dabei seit: 18.08.2019
Beiträge: 4

Themenstarter Thema begonnen von flo87

flo87 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich kann der Argumentation folgen, würde aber trotzdem gerne eine programmiertechnische Lösung sehen, die von allen möglichen Kombinationen den MD5-Wert ermittelt.
19.08.2019 13:47 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 12.946
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Programmtiertechnisch würde man das nie machen, weil es enorme Ressourcen kostet.
Zudem ist MD5 vergleichweise anfällig und langsam.

Gerade für Datei-Hashwerte gibt es viel bessere Verfahren - wenn man überhaupt Hashen muss.
 Empfehlung und Erfahrungswerte für Hash-Verfahren - Wie grosse Dateien vernünftig Hashen?

Ansonsten sind das eben stupide 20 verschachtelte Schleifen, wie es ja schon genannt wurde.
Wir werden Dir aber nicht den Code dafür schreiben, bezogen auf die Formulierung, dass Du "eine Lösung sehen willst".
Das Forum ist kein Lösungs- oder Code-Generator.

Alternativ musst eben sagen, wo Du genau hängst, damit man Dich in die richtige Richtung schubsen kann.
Ausprogrammieren musst es aber selbst.
19.08.2019 14:19 Beiträge des Benutzers | zu Buddylist hinzufügen
Spook Spook ist männlich
myCSharp.de-Mitglied

Dabei seit: 28.10.2008
Beiträge: 199
Entwicklungsumgebung: VS2015 Professional
Herkunft: Esslingen a.N.


Spook ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo flo87,

ich würde einen Integer-Datentyp (mit passender Größe) und eine einfache for-Schleife verwenden:

C#-Code:
        int requiredBits = 20;
        uint maxValue = 1u << requiredBits;
        for (uint register = 0; register < maxValue; register++)
        {
            bool bit1 = (register & 1) != 0;
            bool bit2 = (register & 2) != 0;
            bool bit3 = (register & 4) != 0;
            bool bit4 = (register & 8) != 0;
            // ...
        }

Mit dieser wird jede mögliche Kombination exakt einmal durchlaufen. Du musst lediglich die einzelnen Bits an deinen weiteren Algorithmus anbinden.

Grüße
spooky
19.08.2019 15:31 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als ein Monat.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 18.09.2019 13:42