PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage: Unterschied zu MD5 aus .txt und "roh"



doyouhav0th0sourc0?
16.12.2011, 15:10
Moin, moin.
Folgendes Script:

#!/bin/sh

hashme=$*;
echo $hashme >> me.txt;
md5sum me.txt >> md5.txt;
Folgendes Problem: wenn ich die Prüfsumme irgendwo anders im Entennet machen lasser kommt etwas anderes raus als hier. Bsp.:
"twitter" führt zu fogenden Ergebnissen:
Hier: 2766261fd348db216869dfd0743149a6 me.txt
Auf PHP-Space (http://www.php-space.info/php/space/md5-generatoren.php): b73c2d22763d1ce2143a3755c1d0ad3a

Liegt das darann das ich das MD5 aus einer Datei mache? Wie kann ich das auf der Shell umgehen?
thx schonmal jetzt ;) :-D

sn0w
16.12.2011, 15:26
Ist doch logisch, wenn du die MD5 Summe berechnest von einer Datei, welche "Twitter" enthält etwas anderes rauskommt, als wenn man sich die MD5 Summe des Wortes "Twitter" bildet.

Was du jetzt allerdings mit der Shell vorhast verstehe ich nicht.

Hor/\drim
16.12.2011, 15:34
Hi!

md5sum gibt dir den MD5 Hash auf die gesamte Datei angewendet aus. Nicht nur auf die eine Zeichenfolge. Auch Leerzeilen, Zeilenumbrüche usw. werden mitgerechnet

Was willst du exakt machen? Wörter aus einer Datei nehmen und diese dann als MD5 Hash ausgeben lassen, oder?

Edit: sorry, snow war schneller.

doyouhav0th0sourc0?
16.12.2011, 15:47
OK. Danke leute. Das wars schon, wenn noch wer sagen kann wie ich dan die MD5-Summe aus einem Wort berchnen könnte wär ich glücklich ;)

Hor/\drim
16.12.2011, 15:56
So berechnest du (z.B., es gibt weitere Möglichkeiten) den Wert eines Strings:

echo -n “twitter” | md5sumHier kannst du dich einarbeiten wie du die Datei Zeile für Zeile ausliest:

http://en.kioskea.net/faq/1757-how-to-read-a-file-line-by-line:)

Die Zeile in eine Variable speichern, die dann anstatt "twitter" an den oben genannten Befehl übergeben. That's it.

doyouhav0th0sourc0?
16.12.2011, 16:01
hey danke. Ich hasse pipes^^

---------- Post added at 17:01 ---------- Previous post was at 16:59 ----------

38485b2cc01a86acbfd8deeba05af612 ? das ist wieder was anderes... -.-"

echo twitter | md5sum

so klappts :)

Hor/\drim
16.12.2011, 16:17
Japs! :)


Oder halt den code speichern (md5Dings) und mit "md5dings md5s.txt" aufrufen

#!/bin/bash
while read line; do echo -n $line|md5sum -; done < $1

Edit:
echo twitter | md5sum gibt dir doch den 276er Hash aus, oder?

loewenherz
16.12.2011, 17:00
twitter = 8 Zeichen = 8Bit (Da Ascii pro Zeichen 1 bit)
me.txt mit Inhalt "twitter" = 4,00 KB (4.096 Bytes) da noch Metadate wie Dateiname, Endung etc mitgespeichert werden müssen.

Hor/\drim
16.12.2011, 17:13
@Loewenherz:
Eh, stimmt so nicht meiner Meinung nach.
8 Bit = 1 Byte!
Du kannst nicht 1 Zeichen in einem Bit darstellen (außer boolean)


textmd und textmd5.txt enthalten beide den gleichen Text. MD5Sum ist es recht egal wie die Datei heißt.
Auch die Erweiterung usw. ändern nichts an der Größe der Datei, da diese Sachen nicht "in" der Datei gespeichert werden.
Siehe:


http://img6.imagebanana.com/img/lvs20nb1/md5dings.JPG

SFX
16.12.2011, 17:50
Die Metadaten sind im Dateisystem, nicht in der Textdatei.


hey danke. Ich hasse pipes^^

das Problem sind nicht die Pipes sondern das Programm /bin/echo

Das hängt einen Zeilenumbruch ans Ende der Zeile:



me@catbox:~$ echo hax | hd
00000000 68 61 78 0a |hax.|
00000004
me@catbox:~$ echo -n hax | hd
00000000 68 61 78 |hax|
00000003
me@catbox:~$
me@catbox:~$
me@catbox:~$ php -r 'echo md5("hax") . "\n";'
758e3940a50685dc33436f9268628b52
me@catbox:~$ php -r 'echo md5("hax\n") . "\n";'
17043a39b87f5e6d18efecde4833b742
me@catbox:~$
me@catbox:~$
me@catbox:~$ echo hax | md5sum
17043a39b87f5e6d18efecde4833b742 -
me@catbox:~$ echo -n hax | md5sum
758e3940a50685dc33436f9268628b52 -
me@catbox:~$
me@catbox:~$
me@catbox:~$ echo hax > foo
me@catbox:~$ md5sum < foo
17043a39b87f5e6d18efecde4833b742 -
me@catbox:~$ md5sum foo
17043a39b87f5e6d18efecde4833b742 foo
me@catbox:~$
me@catbox:~$
me@catbox:~$ echo -n hax > foo
me@catbox:~$ md5sum < foo
758e3940a50685dc33436f9268628b52 -
me@catbox:~$ md5sum foo
758e3940a50685dc33436f9268628b52 foo
me@catbox:~$
ob du die Bytes direkt hast, oder ob du die selben Bytes aus einer Datei bekommst, macht keinen Unterschied, mehr ist es nicht.

Hor/\drim
16.12.2011, 17:55
Das hängt einen Zeilenumbruch ans Ende der Zeile:


Ah, großartig. Das hatte ich nicht beachtet bzw. gefunden. :)

loewenherz
16.12.2011, 18:26
@Loewenherz:
Eh, stimmt so nicht meiner Meinung nach.
8 Bit = 1 Byte!
Du kannst nicht 1 Zeichen in einem Bit darstellen (außer boolean)


Ah verdammt, natürlich byte nicht bit. Ein Asci Zeichen hat immer 8Bit. Hast vollkommen recht.



Die Metadaten sind im Dateisystem, nicht in der Textdatei.Das ist denke ich sehr Dateisystemabhängig oder unterscheiden sich in dem Fall NTFS und extx nicht wirklich?
Augenscheinlich würde ich das Gegenteil behaupten ;)

Wieder was gelernt.

SFX
16.12.2011, 18:53
Das ist denke ich sehr Dateisystemabhängig oder unterscheiden sich in dem Fall NTFS und extx nicht wirklich?
Augenscheinlich würde ich das Gegenteil behaupten ;)

Wieder was gelernt.

Klar sind die Unterschiedlich, aber es haben trotzdem alle gemeinsam, dass Metadaten an einer anderen Stelle auf der Platte stehen als die Daten.

Die untere Grafik zeigt was ich meine:
http://thinkdifferent.typepad.com/photos/uncategorized/03extfilesystem.png
Die Metadaten stehen im Inode, aber dort wird nur auf die eigentliche Datei verwiesen, mit der wir arbeiten und öffnen.

Sonst würde es ja garkeinen Sinn machen, Prüfsummen von Archiven mit zu veröffentlichen, weil die sich durchs hochladen und abspeichern ja mehrmals ändern müsste.. ;)

ocz
16.12.2011, 19:01
Ah verdammt, natürlich byte nicht bit. Ein Asci Zeichen hat immer 8Bit. Hast vollkommen recht.
7

loewenherz
16.12.2011, 19:41
7
Extended Ascii ist 8bit.

Ohne diese Erweiterung hätte wir z.B. keine Umlaut und auch kein Eurozeichen

ocz
16.12.2011, 20:25
Extended Ascii ist 8bit.
Ascii ist ascii und hat 7 Bit / Zeichen. Ist ja aber auch egal, dass das md5sum Programm Dateien und nicht die dazugehörigen Sektoren hasht, hat SFX ja schon dargelegt

loewenherz
16.12.2011, 20:27
Ascii ist ascii und hat 7 Bit / Zeichen

z.B:
http://en.wikipedia.org/wiki/ISO_8859-1

ocz
16.12.2011, 20:32

z.B:
http://en.wikipedia.org/wiki/ISO_8859-1

[...]is part of the ISO/IEC 8859 series of ASCII-based standard character encodings[...]
ASCII ist ein Standard. Und nicht mehrere. Aber da du gerade auf Wiki verlinkst: Die "ASCII"-Wikiseite sagt sogar ausdrücklich:

ASCII From Wikipedia, the free encyclopedia
Not to be confused with Windows-1252, also known as "ANSI", or other types of Extended ASCII, often just called "ASCII".

loewenherz
16.12.2011, 20:42
ASCII ist ein Standard. Und nicht mehrere.

ASCII ist erstmal nur eine Bezeichnung für die Norm ISO 646.
Von der ISO 646. Und ja da hast du recht, haben es eben nochmal nachgelesen. eAscii ist nicht in diese ISO definiert.



Die nationalen Versionen in ISO 646 wurden ab den 1980er Jahren in der Praxis durch den De-facto (http://de.wikipedia.org/wiki/De_facto)-Standard der 8-Bit-MS-DOS (http://de.wikipedia.org/wiki/MS-DOS)-Codepages (http://de.wikipedia.org/wiki/Codepage) des IBM-PC (http://de.wikipedia.org/wiki/IBM-PC) und durch die ebenfalls achtbittigen ISO-8859 (http://de.wikipedia.org/wiki/ISO_8859)-Zeichensätze abgelöst – letztere werden z. B. in Linux (http://de.wikipedia.org/wiki/Linux) und Microsoft Windows (http://de.wikipedia.org/wiki/Microsoft_Windows) verwendet. Alle diese Standards beruhen anders als die nationalen Versionen von ISO 646 auf dem unveränderten ASCII-Zeichensatz. Die zusätzlich benötigten Zeichen ersetzen nicht länger ASCII-Zeichen, sondern werden zu diesen hinzugefügt. Dadurch wurde die Austauschbarkeit von Daten zwischen Rechnern verschiedener Länder vereinfacht; auch für Programmierer außerhalb der USA wurde das Leben leichter, da viele der in der ISO-646-Norm zum Ersetzen freigegebenen Zeichen des US-ASCII, die in den anderen ISO-646-Varianten ja somit teilweise oder völlig fehlen, häufig in vielen Programmiersprachen (http://de.wikipedia.org/wiki/Programmiersprache) vorkommen.
Inzwischen müssen diese 8-Bit-Zeichensätze wiederum allmählich dem Unicode (http://de.wikipedia.org/wiki/Unicode) weichen.


Das war es eigentlich was ich meinte xD