Crittografia [PERL] MD5 & SHA1 cracker

Stato
Discussione chiusa ad ulteriori risposte.

mystixx

Utente Silver
11 Giugno 2007
26
4
0
65
Ho appena finito di scriverlo... il codice è molto migliorabile... si può ridurre ai 3/4 di lunghezza inserendo qualche if e cambiando qualche variabile... ma nn mi va!tanto funziona...

Il prog, per il dictionary attack, non fa altro che aprire il dizionario e memorizzare in un array tutte le righe, di moto che il contenuto di una riga sia il un elemento dell'array... perciò il dizionario deve essere strutturato come quello in allegato :D...
[attachment=50]

Per finire... qualcuno farebbe da tester? thanxxxx!!

edited: la nuova versione del codice che decripta anche SHA1:

Codice:
#  MD5 & SHA1 cracker
#  Per trovare la stringa di caratteri corrispondete al codice MD5 o SHA1
#  tramite bruteforce o dictionary attack

use Digest::MD5 'md5_hex';
use Digest::SHA1 'sha1_hex';

  
@char = ('a','b','c','d','e','f','g','h','i','j',
'k','l','m','n','o','p','q','r','s','t',
'u','v','w','x','y','z','A','B','C','D','E',
'F','G','H','I','J','K','L','M','N','O',
'P','Q','R','S','T','U','V','W','X','Y','Z',
'1','2','3','4','5','6','7','8','9','0',
'`','-','=','~','!','@','#','$','%','^',
'&','*','(',')','_','+','{','}','|',':',
'"','<','>',' ');

print "\n";
print " ************************************\n";
print " *        educative use only        *\n";
print " ************************************\n";
print " *         MD5/SHA1 cracker         *\n";
print " ************************************\n";
print " ************************************\n";
print " *   bruteforce code by Tweakz20    *\n";
print " *       tradotto da Anubis         *\n";
print " *                                  *\n";
print " *       dictionary atk code        *\n";
print " *        and SHA1 features         *\n";
print " *           by mystixx             *\n";
print " ************************************\n\n";

scelta_iniziale();

sub scelta_iniziale() {
	print"\nType 1 for MD5 hash, 2 for SHA1 hash: ";
	chomp($scelta_iniziale = <STDIN>);
	if ($scelta_iniziale eq '1') {scelta2();}
	elsif ($scelta_iniziale eq '2') {sceltaSHA1();}
	else {print " $scelta_iniziale --> Invalid entry\n"; scelta_iniziale();}
}


sub scelta2() {
	print"\nType 1 for a bruteforce attack, 2 for a dictionary attack: ";
	chomp($scelta2 = <STDIN>);
	if ($scelta2 eq '1') {getmd5();}
	elsif ($scelta2 eq '2') {dict();}
	else {print " $scelta2 --> Invalid entry\n"; scelta2();}
}


sub getmd5 {
   print "\nMD5 hash, please (or exit to terminate): ";
   chomp($md5 = <STDIN>); print "\n";
   $start_time = localtime;
   $start_time2 = time;
   testarg();
   }


sub testarg {
   $len = length ($md5);
   if ($len eq 32) { makelist(); }
   elsif ($md5 eq 'exit') {exit();}
   else { usage(); }
}

sub makelist {
for ($br = 3; $br <= 12; $br++) {
   for ($len1 = 0; $len1 <= 85; $len1++) {
      $word[1] = $char[$len1];    
      for ($len2 = 0; $len2 <= 85; $len2++) {
         $word[2] = $char[$len2];
         if ($br <= 2) {
            AddToList(@word);
         }
      else {
      for ($len3 = 0; $len3 <= 85; $len3++) {
      $word[3] = $char[$len3];
      if ($br <= 3) {
      AddToList(@word);
      }
      else {
      for ($len4 = 0; $len4 <= 85; $len4++) {
      $word[4] = $char[$len4];
      if ($br <= 4) {
      AddToList(@word);
      }
      else {
      for ($len5 = 0; $len5 <= 85; $len5++) {
      $word[5] = $char[$len5];
      if ($br <= 5) {
      AddToList(@word);
      }
      else {
      for ($len6 = 0; $len6 <= 85; $len6++) {
      $word[6] = $char[$len6];
      if ($br <= 6) {
      AddToList(@word);
      }
      else {
      for ($len7 = 0; $len7 <= 85; $len7++) {
      $word[7] = $char[$len7];
      if ($br <= 7) {
      AddToList(@word);
      }
      else {
      for ($len8 = 0; $len8 <= 85; $len8++) {
      $word[8] = $char[$len8];
      if ($br <= 8) {
      AddToList(@word);
      }
      else {
      for ($len9 = 0; $len9 <= 85; $len9++) {
      $word[9] = $char[$len9];
      if ($br <= 9) {
      AddToList(@word);
      }
      else {
      for ($len10 = 0; $len10 <= 85; $len10++) {
      $word[10] = $char[$len10];
      if ($br <= 10) {
      AddToList(@word);
      }
      else {
      for ($len11 = 0; $len11 <= 85; $len11++) {
      $word[11] = $char[$len11];
      if ($br <= 11) {
      AddToList(@word);
      }
      else {
      for ($len12 = 0; $len12 <= 85; $len12++) {
      $word[12] = $char[$len12];
      if ($br <= 12) {
      AddToList(@word);
      }
      else {
      for ($len13 = 0; $len13 <= 85; $len13++) {
      $word[13] = $char[$len13];
      if ($br <= 13) {
      AddToList(@word);
      }
      else {
      for ($len14 = 0; $len14 <= 85; $len14++) {
      $word[14] = $char[$len14];
      if ($br <= 14) {
      AddToList(@word);
}}}}}}}}}}}}}}}}}}}}}}}}}}}}}


sub AddToList {

    my (@entry) = @_;
    $test = join "", @entry;
    my ($m) = md5_hex "$test";
    print ("$m = $test\n");
    if ($m eq $md5){
    $finish_time = localtime;
    $finish_time2 = time;
    $ttime = $finish_time2 - $start_time2;
    print "\n\n\n***!!!MD5 CRACKED!!!***\n\n";
    print "Text decrypted: $test\n\n";	
    print "\n   Inizio processo:     $start_time";
    print "\n    Fine processo:      $finish_time\n";
    print "\n   Processo completato in $ttime secondi.\n";
    scelta();
   }
}

sub usage {
   print "Incorrect MD5 hash!\n\n";
   getmd5();
}

sub usage2 {
   print "Incorrect MD5 hash!\n\n";
   dict();
}

sub exit {
}

sub esporta {
	print " Inserisci il nome del file: ";
	chomp($filename = <STDIN>);
  if ($filename eq '') {print " --> Attenzione!Devi specificare il nome del file...\n\n"; esporta();}
	elsif (open TESTO, ">$filename.txt") {
	print TESTO "MD5 BruteForce Attack results\n\n";
	print TESTO "***!!!MD5 CRACKED!!!***\n\n";
	print TESTO "MD5 hash: $md5\n";
	print TESTO "\nText decrypted: $test\n\n";	
	print TESTO "\n   Inizio processo:     $start_time";
	print TESTO "\n    Fine processo:      $finish_time\n";
	print TESTO "\n   Processo completato in $ttime secondi.\n";
	print "\n   Risultati esportati in $filename.txt\n";
	exit();
	} else {
	die " --> Errore: $!\n";
	exit();
	}
}

sub scelta {	
	print "\n\n Vuoi esportare i risultati in un file? (Y/N)  ";
	my $scelta;
	chomp($scelta = <STDIN>);
	if ($scelta eq 'y') {esporta();}
	elsif ($scelta eq 'Y') {esporta();}
	elsif ($scelta eq 'n') {exit();}
	elsif ($scelta eq 'N') {exit();}
	else {print " $scelta --> Invalid entry"; scelta();}
}


sub dict() {
	print "\nMD5 hash, please (or exit to terminate): ";
	chomp($hash = <STDIN>); print "\n";
	$len2 = length ($hash);
	if ($len2 eq 32) {attack();}
	elsif ($hash eq 'exit') {exit();}
  else {usage2();}
}

sub attack() {
  apri();
	$max_i = $#parole;
	$at_st_time = localtime;
	$at_st_time2 = time;
	for ($i=0; $i<=$max_i; $i++) {
	my $str = @parole[$i];
	chomp ($str);
	my $str2 = md5_hex($str);
	print "$str2 = $str\n";
	if ($str2 eq $hash) {cracked();}
	elsif ($i == $max_i) {fail();}}
}

sub apri() {
	print "\n Inserisci il percorso del dizionario: ";
	chomp($dictname = <STDIN>); print "\n";
	if ($dictname eq '') {print " --> Attenzione!Devi specificare il percorso del dizionario...\n\n"; apri();}
	elsif (open DICT, "<", $dictname) {
	@parole = <DICT>;
	} else {
	print " --> Errore! Impossibile aprire il file $dictname: $!\n";
	apri();
	}}


sub cracked() {
	$at_fin_time = localtime;
	$at_fin_time2 = time;
	$at_ttime = $at_fin_time2 - $at_st_time2;
  print "\n\n\nMD5 Dictionary Attack results\n\n";
  print "\n\n***!!!MD5 CRACKED!!!***\n";
  print "\nText decrypted: @parole[$i]\n\n";	
  print "\n   Inizio processo:     $at_st_time";
  print "\n    Fine processo:      $at_fin_time\n";
  print "\n   Processo completato in $at_ttime secondi.\n";
  scelta3(); 
}

sub fail() {
	$at_fin_time = localtime;
	$at_fin_time2 = time;
	$at_ttime = $at_fin_time2 - $at_st_time2;
  print "\n\n\nMD5 Dictionary Attack results\n";
  print "\n\n***!!!MD5 UNCRACKED!!!***\n";
  print "\nMD5 hash: $hash\n";	
  print "\n\nDictionary attack FAILED... try BruteForce attack\n\n";
  print "\n   Inizio processo:     $at_st_time";
  print "\n    Fine processo:      $at_fin_time\n";
  print "\n   Processo completato in $at_ttime secondi.\n";
  scelta4(); 

	}


sub scelta3 {
	print "\n\n Vuoi esportare i risultati in un file? (Y/N)  ";
	my $scelta;
	chomp($scelta = <STDIN>);
	if ($scelta eq 'y') {esporta2();}
	elsif ($scelta eq 'Y') {esporta2();}
	elsif ($scelta eq 'n') {exit();}
	elsif ($scelta eq 'N') {exit();}
	else {print " $scelta --> Invalid entry"; scelta3();}
}

sub esporta2 {
	print " Inserisci il nome del file: ";
	chomp($filename = <STDIN>);
  if ($filename eq '') {print " --> Attenzione!Devi specificare il nome del file...\n\n"; esporta();}
	elsif (open TESTO, ">$filename.txt") {
	print TESTO "MD5 Dictionary Attack results\n\n";
	print TESTO "***!!!MD5 CRACKED!!!***\n\n";
	print TESTO "MD5 hash: $hash\n";
	print TESTO "\nText decrypted: @parole[$i]\n\n";	
	print TESTO "\n   Inizio processo:     $at_st_time";
	print TESTO "\n    Fine processo:      $at_fin_time\n";
	print TESTO "\n   Processo completato in $at_ttime secondi.\n";
	print "\n   Risultati esportati in $filename.txt\n";
	exit();
	} else {
	die " --> Errore: $!\n";
	exit();
	}
}

sub scelta4 {
	print "\n\n Vuoi esportare i risultati in un file? (Y/N)  ";
	my $scelta;
	chomp($scelta = <STDIN>);
	if ($scelta eq 'y') {esporta3();}
	elsif ($scelta eq 'Y') {esporta3();}
	elsif ($scelta eq 'n') {exit();}
	elsif ($scelta eq 'N') {exit();}
	else {print " $scelta --> Invalid entry"; scelta4();}
}

sub esporta3 {
	print " Inserisci il nome del file: ";
	chomp($filename = <STDIN>);
  if ($filename eq '') {print " --> Attenzione!Devi specificare il nome del file...\n\n"; esporta();}
	elsif (open TESTO, ">$filename.txt") {
  print TESTO "MD5 Dictionary Attack results\n\n";
  print TESTO "***!!!MD5 UNCRACKED!!!***\n";
  print TESTO "MD5 hash: $hash\n";	
  print TESTO "\nDictionary attack FAILED... try BruteForce attack\n\n";
  print TESTO "\n   Inizio processo:     $at_st_time";
  print TESTO "\n    Fine processo:      $at_fin_time\n";
  print TESTO "\n   Processo completato in $at_ttime secondi.\n";
  print "\n   Risultati esportati in $filename.txt\n";
	exit();
	} else {
	die " --> Errore: $!\n";
	exit();
	}
}

sub sceltaSHA1() {
	print"\nType 1 for a bruteforce attack, 2 for a dictionary attack: ";
	chomp($sceltaSHA1 = <STDIN>);
	if ($sceltaSHA1 eq '1') {getsha1();}
	elsif ($sceltaSHA1 eq '2') {dictSHA1();}
	else {print " $sceltaSHA1 --> Invalid entry\n"; sceltaSHA1();}
}

sub getsha1 {
   print "\nSHA1 hash, please (or exit to terminate): ";
   chomp($sha1 = <STDIN>); print "\n";
   $start_time = localtime;
   $start_time2 = time;
   testargSHA1();
}

sub testargSHA1 {
   $len = length ($sha1);
   if ($len eq 40) { makelistSHA1(); }
   elsif ($sha1 eq 'exit') {exit();}
   else { usage3(); }
}

sub makelistSHA1 {
for ($br = 3; $br <= 12; $br++) {
   for ($len1 = 0; $len1 <= 85; $len1++) {
      $word[1] = $char[$len1];    
      for ($len2 = 0; $len2 <= 85; $len2++) {
         $word[2] = $char[$len2];
         if ($br <= 2) {
            AddToListSHA1(@word);
         }
      else {
      for ($len3 = 0; $len3 <= 85; $len3++) {
      $word[3] = $char[$len3];
      if ($br <= 3) {
      AddToListSHA1(@word);
      }
      else {
      for ($len4 = 0; $len4 <= 85; $len4++) {
      $word[4] = $char[$len4];
      if ($br <= 4) {
      AddToListSHA1(@word);
      }
      else {
      for ($len5 = 0; $len5 <= 85; $len5++) {
      $word[5] = $char[$len5];
      if ($br <= 5) {
      AddToListSHA1(@word);
      }
      else {
      for ($len6 = 0; $len6 <= 85; $len6++) {
      $word[6] = $char[$len6];
      if ($br <= 6) {
      AddToListSHA1(@word);
      }
      else {
      for ($len7 = 0; $len7 <= 85; $len7++) {
      $word[7] = $char[$len7];
      if ($br <= 7) {
      AddToListSHA1(@word);
      }
      else {
      for ($len8 = 0; $len8 <= 85; $len8++) {
      $word[8] = $char[$len8];
      if ($br <= 8) {
      AddToListSHA1(@word);
      }
      else {
      for ($len9 = 0; $len9 <= 85; $len9++) {
      $word[9] = $char[$len9];
      if ($br <= 9) {
      AddToListSHA1(@word);
      }
      else {
      for ($len10 = 0; $len10 <= 85; $len10++) {
      $word[10] = $char[$len10];
      if ($br <= 10) {
      AddToListSHA1(@word);
      }
      else {
      for ($len11 = 0; $len11 <= 85; $len11++) {
      $word[11] = $char[$len11];
      if ($br <= 11) {
      AddToListSHA1(@word);
      }
      else {
      for ($len12 = 0; $len12 <= 85; $len12++) {
      $word[12] = $char[$len12];
      if ($br <= 12) {
      AddToListSHA1(@word);
      }
      else {
      for ($len13 = 0; $len13 <= 85; $len13++) {
      $word[13] = $char[$len13];
      if ($br <= 13) {
      AddToListSHA1(@word);
      }
      else {
      for ($len14 = 0; $len14 <= 85; $len14++) {
      $word[14] = $char[$len14];
      if ($br <= 14) {
      AddToListSHA1(@word);
}}}}}}}}}}}}}}}}}}}}}}}}}}}}}

sub AddToListSHA1 {

    my (@entry) = @_;
    $test = join "", @entry;
    my ($m) = sha1_hex($test);
    print ("$m = $test\n");
    if ($m eq $sha1){
    $finish_time = localtime;
    $finish_time2 = time;
    $ttime = $finish_time2 - $start_time2;
    print "\n\n\n***!!!SHA1 CRACKED!!!***\n\n";
    print "Text decrypted: $test\n\n";	
    print "\n   Inizio processo:     $start_time";
    print "\n    Fine processo:      $finish_time\n";
    print "\n   Processo completato in $ttime secondi.\n";
    scelta5();
   }
}

sub usage3 {
   print "Incorrect SHA1 hash!\n\n";
   getsha1();
}

sub scelta5 {	
	print "\n\n Vuoi esportare i risultati in un file? (Y/N)  ";
	my $scelta;
	chomp($scelta = <STDIN>);
	if ($scelta eq 'y') {esporta4();}
	elsif ($scelta eq 'Y') {esporta4();}
	elsif ($scelta eq 'n') {exit();}
	elsif ($scelta eq 'N') {exit();}
	else {print " $scelta --> Invalid entry"; scelta();}
}

sub esporta4 {
	print " Inserisci il nome del file: ";
	chomp($filename = <STDIN>);
  if ($filename eq '') {print " --> Attenzione!Devi specificare il nome del file...\n\n"; esporta();}
	elsif (open TESTO, ">$filename.txt") {
	print TESTO "SHA1 BruteForce Attack results\n\n";
	print TESTO "***!!!SHA1 CRACKED!!!***\n\n";
	print TESTO "SHA1 hash: $sha1\n";
	print TESTO "\nText decrypted: $test\n\n";	
	print TESTO "\n   Inizio processo:     $start_time";
	print TESTO "\n    Fine processo:      $finish_time\n";
	print TESTO "\n   Processo completato in $ttime secondi.\n";
	print "\n   Risultati esportati in $filename.txt\n";
	exit();
	} else {
	die " --> Errore: $!\n";
	exit();
	}
}

sub dictSHA1() {
	print "\nSHA1 hash, please (or exit to terminate): ";
	chomp($hash = <STDIN>); print "\n";
	$len2 = length ($hash);
	if ($len2 eq 40) {attackSHA1();}
	elsif ($hash eq 'exit') {exit();}
  else {usage4();}
}

sub usage4 {
   print "Incorrect SHA1 hash!\n\n";
   dictSHA1();
}

sub attackSHA1() {
  apri();
	$max_i = $#parole;
	$at_st_time = localtime;
	$at_st_time2 = time;
	for ($i=0; $i<=$max_i; $i++) {
	my $str = @parole[$i];
	chomp ($str);
	my $str2 = sha1_hex($str);
	print "$str2 = $str\n";
	if ($str2 eq $hash) {crackedSHA1();}
	elsif ($i == $max_i) {failSHA1();}}
}

sub crackedSHA1() {
	$at_fin_time = localtime;
	$at_fin_time2 = time;
	$at_ttime = $at_fin_time2 - $at_st_time2;
  print "\n\n\nSHA1 Dictionary Attack results\n\n";
  print "\n\n***!!!SHA1 CRACKED!!!***\n";
  print "\nText decrypted: @parole[$i]\n\n";	
  print "\n   Inizio processo:     $at_st_time";
  print "\n    Fine processo:      $at_fin_time\n";
  print "\n   Processo completato in $at_ttime secondi.\n";
  scelta6(); 
}

sub failSHA1() {
	$at_fin_time = localtime;
	$at_fin_time2 = time;
	$at_ttime = $at_fin_time2 - $at_st_time2;
  print "\n\n\nSHA1 Dictionary Attack results\n\n";
  print "\n\n***!!!SHA1 UNCRACKED!!!***\n";
  print "\nSHA1 hash: $hash\n";	
  print "\n\nDictionary attack FAILED... try BruteForce attack\n\n";
  print "\n   Inizio processo:     $at_st_time";
  print "\n    Fine processo:      $at_fin_time\n";
  print "\n   Processo completato in $at_ttime secondi.\n";
  scelta7(); 
}

sub scelta6 {
	print "\n\n Vuoi esportare i risultati in un file? (Y/N)  ";
	my $scelta;
	chomp($scelta = <STDIN>);
	if ($scelta eq 'y') {esporta5();}
	elsif ($scelta eq 'Y') {esporta5();}
	elsif ($scelta eq 'n') {exit();}
	elsif ($scelta eq 'N') {exit();}
	else {print " $scelta --> Invalid entry"; scelta3();}
}

sub scelta7 {
	print "\n\n Vuoi esportare i risultati in un file? (Y/N)  ";
	my $scelta;
	chomp($scelta = <STDIN>);
	if ($scelta eq 'y') {esporta6();}
	elsif ($scelta eq 'Y') {esporta6();}
	elsif ($scelta eq 'n') {exit();}
	elsif ($scelta eq 'N') {exit();}
	else {print " $scelta --> Invalid entry"; scelta4();}
}

sub esporta5 {
	print " Inserisci il nome del file: ";
	chomp($filename = <STDIN>);
  if ($filename eq '') {print " --> Attenzione!Devi specificare il nome del file...\n\n"; esporta();}
	elsif (open TESTO, ">$filename.txt") {
	print TESTO "SHA1 Dictionary Attack results\n\n";
	print TESTO "***!!!SHA1 CRACKED!!!***\n\n";
	print TESTO "SHA1 hash: $hash\n";
	print TESTO "\nText decrypted: @parole[$i]\n\n";	
	print TESTO "\n   Inizio processo:     $at_st_time";
	print TESTO "\n    Fine processo:      $at_fin_time\n";
	print TESTO "\n   Processo completato in $at_ttime secondi.\n";
	print "\n   Risultati esportati in $filename.txt\n";
	exit();
	} else {
	die " --> Errore: $!\n";
	exit();
	}
}

sub esporta6 {
	print " Inserisci il nome del file: ";
	chomp($filename = <STDIN>);
  if ($filename eq '') {print " --> Attenzione!Devi specificare il nome del file...\n\n"; esporta();}
	elsif (open TESTO, ">$filename.txt") {
  print TESTO "SHA1 Dictionary Attack results\n\n";
  print TESTO "***!!!SHA1 UNCRACKED!!!***\n";
  print TESTO "SHA1 hash: $hash\n";	
  print TESTO "\nDictionary attack FAILED... try BruteForce attack\n\n";
  print TESTO "\n   Inizio processo:     $at_st_time";
  print TESTO "\n    Fine processo:      $at_fin_time\n";
  print TESTO "\n   Processo completato in $at_ttime secondi.\n";
  print "\n   Risultati esportati in $filename.txt\n";
	exit();
	} else {
	die " --> Errore: $!\n";
	exit();
	}
}
 
RE: [PERL] MD5 cracker

Senti non conosco il perl, qualè la funzione che ti restituisce l 'HASH MD5 di una parola in PERL?
 
RE: [PERL] MD5 cracker

__GiReX__ ha detto:
qualè la funzione che ti restituisce l 'HASH MD5 di una parola in PERL?

questa:
Codice:
my ($m) = md5_hex "$test";

$test è il testo in chiaro, md5_hex lo cripta, e poi viene memorizzato nella variabile $m...
 
RE: [PERL] MD5 cracker

nuova versione... decripta anche SHA1 (il codice sta sopra...)

qui c'è anche la versione .exe: [attachment=56]
 
RE: [PERL] MD5 & SHA1 cracker

ha un piccolo problema questo prog... praticamente... se io devo riavviare (mettiamo un esempo...) devo rincominciare il brute dall'inizio...
 
RE: [PERL] MD5 & SHA1 cracker

morfeo ha detto:
ha un piccolo problema questo prog... praticamente... se io devo riavviare (mettiamo un esempo...) devo rincominciare il brute dall'inizio...

avevo già notato la scomodità della cosa... tra qualche giorno, dopo gli esami, se non è troppo difficile (eheheh) implemento la funzione...
 
RE: [PERL] MD5 & SHA1 cracker

scusa morfeo ma mi scappa troppo da ahahahahaahahahahahaha LOL³
Per il resto complimenti Mystixx...
Io ho il perl installato, ma sei sicuro che sia perl??, perche' l'inizio e' diverso da quello che ho sempre visto e cioe'
" #!/usr/bin/perl "
Poi a me' interesserebbe avere sul sito la possibilita' di un modulo che inserendo una password, vada a leggere da un file o da sql dbase, la relativa decriptazione del hash MD5 !!
Avevo visto quello su un sito di kinglion che doveva passarmelo.. non ho saputo piu' nulla... Adesso mi ripropongo di chiederlo se qualcuno avesse questo modulo me lo potrebbe passare??, magari facciamo scambio con qualcosa che ho del mio sito..
Grazie a tutti.
 
RE: [PERL] MD5 & SHA1 cracker

dreaker ha detto:
ma sei sicuro che sia perl??

si si... certo che è PERL... ecco la spiegazione, tratta da "Corso di Perl" di Michele Beltrame:

Codice:
#!/usr/local/bin/perl5 -w
print "Ciao, Mondo!\n";
La prima riga è di vitale importanza solo in ambiente Unix, in quanto si occupa di invocare l'interprete quando lo script viene eseguito chiamandolo dalla linea di comando semplicemente digitandone il nome (altrimenti sarebbe stato necessario digitare perl -w nomeprog.pl per garantirne l'esecuzione). Sotto Windows la presenza di tale riga non dà alcun fastidio, in quanto il cancelletto indica che ogni carattere da quel momento in poi e fino alla fine della riga deve essere considerato commento, e quindi non interpretato. [...]

...e il mio ambiente è windows...

dreaker ha detto:
Poi a me' interesserebbe avere sul sito la possibilita' di un modulo che inserendo una password, vada a leggere da un file o da sql dbase, la relativa decriptazione del hash MD5 !!

??????? nn riesco proprio a capire che cosa vorresti fare... prova a spiegarmelo meglio, magari posso esserti di aiuto!
 
Stato
Discussione chiusa ad ulteriori risposte.