Ungewöhnliche Dateinamen / MD5

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
TerribleCode
Beiträge: 38
Registriert: Di 18. Nov 2014, 22:50
OS, Lazarus, FPC: Windows 7 [x64]; Lazarus 1.6.4 [i386-win32]; FPC 3.0.2 [win32 i386]
CPU-Target: 64Bit

Ungewöhnliche Dateinamen / MD5

Beitrag von TerribleCode »

Hey Leute,

ich möchte mit meinem Programm von allen Dateien eines Ordners eine MD5-Summe erstellen.
Ich hab allerdings so meine Problem mit Sonderzeichen... :cry:

Es geht hier nicht um Ä, Ö oder Ü... Das kriege ich hin... Sonder um so Zeichen wie: ♫
Habe ein Beispiel-Projekt gepackt mit Dateien die mir Probleme bereiten.

Meine Frage ist halt, was muss ich machen damit ich bei Dateien mit solchen Sonderzeichen keinen leeren MD5-String kriege?

Danke fürs reinschauen und Grüße an alle! 8)
Dateianhänge
NeedHelp.zip
MD5=FCE1355F93549E8C3005106652B1F733
(4.71 KiB) 80-mal heruntergeladen

Benutzeravatar
theo
Beiträge: 10856
Registriert: Mo 11. Sep 2006, 19:01

Re: Ungewöhnliche Dateinamen / MD5

Beitrag von theo »

Auf Windows nehme ich an?

Wahrscheinlich kann MD5File einfach nicht mit Unicode Dateinamen umgehen.
Kann sein, dass das mit FPC 3.0 geht.
Kannst ja mal mit Lazarus 1.6RC1 probieren: http://sourceforge.net/projects/lazarus/files/

marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Ungewöhnliche Dateinamen / MD5

Beitrag von marcov »

Nein, nur ein paar system und sysutils funktionen sind umgesetzt auf unicode.

Ich hatte letzter Woche dasselbe Problem, und bin schnell nach Delphi XE4 umgestiegen. (es war etwas eilig)

Benutzeravatar
theo
Beiträge: 10856
Registriert: Mo 11. Sep 2006, 19:01

Re: Ungewöhnliche Dateinamen / MD5

Beitrag von theo »

marcov hat geschrieben:Nein, nur ein paar system und sysutils funktionen sind umgesetzt auf unicode.
OK. Dann musst du wahrsch. diese Funktion selber auf Unicode anpassen:

Code: Alles auswählen

function MDFile(const Filename: String; const Version: TMDVersion; const BufSize: PtrUInt): TMDDigest;    
Die Grundlagen sind offenbar da (in typefile.inc):

Code: Alles auswählen

{$ifdef FPC_HAS_FEATURE_WIDESTRINGS}
Procedure Assign(out f:TypedFile;const Name: UnicodeString);

Warf
Beiträge: 2118
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Ungewöhnliche Dateinamen / MD5

Beitrag von Warf »

Du könntest einfach die Datei mit einer unicode unterstützenden Funktionen in einen buffer laden und den dann hashen, so musst du nicht in fremden Dateien rumpfuschen

PS: Md5 ist veraltet nutze lieber einen sha Hash falls das möglich ist

marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Ungewöhnliche Dateinamen / MD5

Beitrag von marcov »

Warf hat geschrieben:Du könntest einfach die Datei mit einer unicode unterstützenden Funktionen in einen buffer laden und den dann hashen, so musst du nicht in fremden Dateien rumpfuschen

PS: Md5 ist veraltet nutze lieber einen sha Hash falls das möglich ist
Was ist exakt das Problem und gilt das auch für Hashing von Dateien? Ich glaube für kurzen Dateien ist MD5 Haufen schneller. Nur für GB+ Dateien (wie ISOs) wird die Chance auf Kollisionen großer. Aber um sicher zu sein muss man nie ganz auf ein Hash vertrauen. (und die Dateien wirklich vergleichen).

Warf
Beiträge: 2118
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Ungewöhnliche Dateinamen / MD5

Beitrag von Warf »

Man kann mit einem Bekannten Algorithmus (keine Ahnung wie der heißt) und genug Rechenleistung bewusst Kollisionen erzeugen, um z.b. Vieren in updater einzuschleusen wie es Microsoft schon schmerzhaft erfahren durfte

Patito
Beiträge: 203
Registriert: Di 22. Sep 2009, 13:08
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Ungewöhnliche Dateinamen / MD5

Beitrag von Patito »

Da hier viel von "Unicode" geschrieben wird, möchte ich noch erwähnen, dass Filenamen an sich
erst mal wenig mit Unicode am Hut haben. Filenamen sind Filenamen - und die darunterliegenden
Filesysteme sind ggf. älter als Unicode.

Unter Windows hat man es mit einer nullterminierten geraden Anzahl von Bytes zu tun.
Das ganze ist UTF-16 sehr ähnlich, aber entspicht nicht immer dem Unicode-Standard.
(Konvertierungen zu UTF-8 gehen nicht immer verlustfrei) - Vorsicht damit!

Wenn man in einer Microsoft-Dokumentation etwas von "benutzt Unicode" liest,
ist das ähnlich wie bei einer Fruchjogurt-Mogelpackung, die "Zutaten von Milch" und
Fruchtfleisch aus Baumwolle enthält.

Ja, Filenamen sind ähnlich wie Unicode - und schmecken gut, solange man nicht die Packungsbeilage durchliest...

Benutzeravatar
theo
Beiträge: 10856
Registriert: Mo 11. Sep 2006, 19:01

Re: Ungewöhnliche Dateinamen / MD5

Beitrag von theo »

Vllt. geht es auch so:

Code: Alles auswählen

ShortFileName(UTF8Decode(FileName));

marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Ungewöhnliche Dateinamen / MD5

Beitrag von marcov »

Ich habe so jetzt in Trunk Unicode Filename Unterstützung für md5 eingetragen. Bitte testen :)

Antworten