помогите плиз разобраться с алгоритмом кодирования (Perl)

Тема в разделе "Другие языки", создана пользователем Zazil, 11 дек 2009.

Статус темы:
Закрыта.
Модераторы: Цукер
  1. Zazil

    Zazil Постоялец

    Регистр.:
    18 окт 2007
    Сообщения:
    52
    Симпатии:
    39
    Вообщем сабж.
    кто хорошо разбирается в Perl помогите плиз
    Вообщем этот скрипт кодирует все файлы находящиеся в директории files и записывает в файл my.bin
    Его можно раскодировать только если знаешь key
    Вообщем вопрос такой. Можно как-то подобрать этот key? Помогите плиз, надо очень один файлик раскриптовать. Спасибо
    Код:
    Код:
    #!/usr/bin/perl
    
    sub Encode{
      $m=0;
      while (substr($ekey,$m*6,6) ne "") {
        $eo=int(substr($ekey,$m*6,3));
        $ea=int(substr($ekey,$m*6+3,3));
        &EncodePass;
        $m++;
      }
    }
    
    sub EncodePass {
      $o=$eo;
      $ninput=length($data);
      for ($i=0;$i<=$ninput-$o-1;$i++) {
        $char1=substr($data,$i,1);
        $char2=substr($data,$i+$o,1);
    
        $nchar=ord($char2);
        if ($ea>255){$ea=0;}
        $nchar=$nchar+$ea;
        if ($nchar>255){$nchar=$nchar-256;}
        $char2=chr($nchar);
        $ea++;
    
        substr($data,$i,1)=$char2;
        substr($data,$i+$o,1)=$char1;
        $o++;
      }
    
      $o--;
      $ea--;
      $keyn=sprintf("%.3u"."%.3u"."%.6u"."%.6u",$eo,$ea,$i,$o);
      $key="$keyn"."$key";
    }
    
    sub EncodeBin {
      chomp(@files=`ls files`);
      foreach $file(@files) {
        $infile=`cat files/$file`;
        $data="$data$infile"."\n<--SPLIT HERE-->\n";
      }
      &Encode;
      open (ENCODED,">my.bin");
      print ENCODED "$data";
      close (ENCODED);
     }
    
    
    
    
    sub Decode {
      $e=`type my.bin`;
    
      $m=0;
      while (substr($key,$m*18,18) ne "") {
        $b=substr($key,$m*18,3);
        $a=substr($key,$m*18+3,3);
        $i=substr($key,$m*18+6,6);
        $d=substr($key,$m*18+12,6);
        &D;
        $m++;
      }
    (@file) = split /<--SPLIT HERE-->\n/,$e;
      
    
      open (TXT,">c.c");
      print TXT "$file[0]";
      close (TXT);
      
    
    }
    
    sub D {
      for ($j=$d;$j>=$b;$j--) {  
        $i--;
        $g=substr($e,$i+$j,1);
        $f=ord(substr($e,$i,1))-$a;
        if ($f<0){$f=$f+256;}
       substr($e,$i,1)=$g;
       substr($e,$i+$j,1)=chr($f);
        $a--;
        if ($a<0){$a=255;}    
      }
    }
    
    
    
    print "Enter ekey (example: 001211): ";
    chomp($ekey=<STDIN>);
    print "Encode key $ekey \n";
    &EncodeBin;
    print "Decode key $key  \n";
    &Decode;
    
     
  2. Ponochka

    Ponochka Постоялец

    Регистр.:
    21 фев 2008
    Сообщения:
    128
    Симпатии:
    13
    надо чтобы этот скрипт ключ как параметр принимал и в цикле его exec'ом запускать пока не подберешь. должен быть какой-то критерий или условие по которому можно понять подошел ключ или нет.
     
  3. Zazil

    Zazil Постоялец

    Регистр.:
    18 окт 2007
    Сообщения:
    52
    Симпатии:
    39
    Спасибо, но это почти нереально. Ключ для расшифровки 18 байт,это как минимум. Если делать через экзек, то очень очень долго подбираться ключ будет.
     
  4. RolCom

    RolCom

    Регистр.:
    12 мар 2008
    Сообщения:
    351
    Симпатии:
    108
    Во-первых не exec а system или ``, т.к. exec приводит завершению скрипта, и проверить мы уже ничего не сможем.
    Во-вторых зачем вообще внешний вызов, тогда уж лучше непосредственно сабжевую программу изменить, добавив цикл и проверку.

    В алгоритме не разбирался, но если реализован человеком, который в вопросе разобрался, а не сочинен говнокодером, то от перебора все равно не уйдешь, т.к. на то они и криптограммы.
     
Статус темы:
Закрыта.