Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]7971[/thread]

Unterschiedliche MD5 Ergebnisse

Leser: 1


<< |< 1 2 3 4 >| >> 36 Einträge, 4 Seiten
Rambo
 2006-05-11 18:46
#65983 #65983
User since
2003-08-14
803 Artikel
BenutzerIn

user image
Hallo zusammen,

könnt ihr mir bitte bei folgenden Problem helfen,
ich habe ein Script welches ab Verzeichnis X bei allen
Dateien die Checksum überprüft.
Leider stimmen diese Checksumm nicht mit anderen Tools
überein.
Hier der Code.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use strict;
use warnings;
use Digest::MD5;
use Cwd;
use File::Find;

my $dir = getcwd;;
my @files;
find(\&get_dir,$dir);

for my $file(@files)
{
print $file,"\n";
my $md5 = Digest::MD5->new;
$md5->add($file);
my $digest = $md5->hexdigest;
print "Digest is $digest\n";
}

sub get_dir
{
push(@files,$File::Find::name) if(-f $File::Find::name);
}

Perl Code Ergebis:
test_file.ini
Digest is a6bdace927a308149e9dc8b5285e46db

md5.exe Ergebnis:
71AC64786DF01778B5791CB9E943AA44 test_file.ini

Was mach ich falsch?

Danke im voraus

Gruss
Rambo
Strat
 2006-05-11 18:59
#65984 #65984
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
was erwartet md5? eine datei oder eine zeichenkette?
teste mal md5sum filename, oder md5 < test_file.ini

der perl-weg printet normalerweise das korrekte ergebnis

[edit]sorry, wiederrufe alles und behaupte das gegenteil[/edit]\n\n

<!--EDIT|Strat|1147363071-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
GwenDragon
 2006-05-11 19:07
#65985 #65985
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
Du machst die MD5-Summe über den Dateinamen.

Na, schon mal in die Doku geschaut ;)

Quote
This is useful when calculating checksum for files:

   use Digest::MD5;
   my $file = shift || "/etc/passwd";
   open(FILE, $file) or die "Can't open '$file': $!";
   binmode(FILE);
   $md5 = Digest::MD5->new;
   while (<FILE>) {
       $md5->add($_);
   }
   close(FILE);
   print $md5->b64digest, " $file\n";
Or we can use the builtin addfile method for more efficient reading of the file:

   use Digest::MD5;
   my $file = shift || "/etc/passwd";
   open(FILE, $file) or die "Can't open '$file': $!";
   binmode(FILE);
   print Digest::MD5->new->addfile(*FILE)->hexdigest, " $file\n";
\n\n

<!--EDIT|GwenDragon|1147360362-->
GwenDragon
 2006-05-11 19:10
#65986 #65986
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
So isset richtich:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
use strict;
use warnings;
use Digest::MD5;
use Cwd;
use File::Find;

my $dir = getcwd;
my @files;
find(\&get_dir,$dir);

for my $file(@files)
 {
  print $file,"\n";
  my $md5 = Digest::MD5->new;
 
  open FILE, $file;
  binmode(FILE);
  while(<FILE>) { $md5->add($_); }
  my $digest = $md5->hexdigest;
  close FILE;
  print "Digest is $digest\n";
}

sub get_dir
 {
  push(@files,$File::Find::name) if(-f $File::Find::name);
  }



Zudem würde ich eher CPAN:Digest::SHA1 bzw. CPAN:Digest::SHA nehmen.
MD5 kann nämlich auch gleiche Summen aufweisen bei unterschiedlichen Dateiinhalten.\n\n

<!--EDIT|GwenDragon|1147360551-->
Rambo
 2006-05-11 19:22
#65987 #65987
User since
2003-08-14
803 Artikel
BenutzerIn

user image
Jetzt war ich gerade noch mal am Probieren nach dem
ich die Doku noch mal gelesen habe und wollte es hier Posten
da warst du aber schon schneller.
Vielen Dank

Btw. SHA1 und MD5 bringen die das gleiche Ergebiss?
Mein Auftrag ist eine Liste mit Checksummen zu liefern
die von der gegenseite geprüft wird.
Ansich benutzen hier alle MD5 weswegen ich es hier auch
gewählt habe.

Werde es mir mal anschauen dann sehe ich ja das Ergebniss.

Merci für die Hilfe

Rambo
GwenDragon
 2006-05-11 19:30
#65988 #65988
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
Nein, SHA1 != MD5.
SHA ist eine längere Prüfsumme.
esskar
 2006-05-11 19:34
#65989 #65989
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=GwenDragon,11.05.2006, 17:30]Nein, SHA1 != MD5.
SHA ist eine längere Prüfsumme.[/quote]
ich benutzt nur noch SHA_256 ++
GwenDragon
 2006-05-11 19:39
#65990 #65990
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
Quote
Digest::SHA
Perl extension for SHA-1/224/256/384/512

SHA256 ist in Digest-SHA drin.\n\n

<!--EDIT|GwenDragon|1147362029-->
Rambo
 2006-05-11 20:03
#65991 #65991
User since
2003-08-14
803 Artikel
BenutzerIn

user image
Dann werde ich es leider nicht einsetzen.

Habe noch eine Verlaufskontrolle eingebaut evtl. kann es
mal jemand benötigen.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# ------------------------------------------------------------------
# loaded modules
# ------------------------------------------------------------------
use strict;
use warnings;
use Digest::MD5;
use Cwd;
use File::Find;
use threads;
use threads::shared;
#
#
# ------------------------------------------------------------------
# start threads
# ------------------------------------------------------------------
my $StopDotPrintFlag : shared;
sub DotPrintThread
{
my ($Interval, @Trash) = @_;
use IO::Handle;
autoflush STDOUT 1;
my $IntervalCount=0;
while ($StopDotPrintFlag != 2)
{
if ($StopDotPrintFlag == 1)
{
print STDOUT ".";
}
$IntervalCount++;
sleep $Interval;
}
return $IntervalCount;
}
#
#
# ------------------------------------------------------------------
# start programm
# ------------------------------------------------------------------
my $dir = getcwd;
my @files;
find(\&get_dir,$dir);

$StopDotPrintFlag = 0;
my $Interval = 1;
my $DotPrintThread = threads->new(\&DotPrintThread, $Interval);
$StopDotPrintFlag = 1;

for my $file(@files)
{
my $md5 = Digest::MD5->new;
open FILE, $file;
binmode(FILE);
while(<FILE>) { $md5->add($_); }
my $digest = $md5->hexdigest;
close FILE;

open(my $fh, ">>md5_check.txt") or die $!;
print $fh "\nDigest is $digest for $file\n";
close $fh;
}

$StopDotPrintFlag = 2;
my $NumberOfPrintedDots=$DotPrintThread->join;
print "\napplied time was ".$NumberOfPrintedDots*$Interval." seconds\n";

sub get_dir
{
push(@files,$File::Find::name) if(-f $File::Find::name);
}

Fehlt nur noch etwas Feinschliff.

Gruss
Rambo
esskar
 2006-05-12 02:16
#65992 #65992
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=Rambo,11.05.2006, 18:03]Dann werde ich es leider nicht einsetzen.[/quote]
weil?
<< |< 1 2 3 4 >| >> 36 Einträge, 4 Seiten



View all threads created 2006-05-11 18:46.