Конференция "Основная" » помогите найти ошибку
 
  • 9899100 (26.05.08 17:07) [0]
    люди помогите найти ошибку, плииз, целый день бьюсь и бестолку
    вот скачал со страницы
    http://www.delphisources.ru/pages/faq/base/idea_encryption.html
    модуль для шифрования IDEA
    пример указанный на странице шифрует файлы, все с ними ок!
    но как только я начинаю шифровать строки..... все ничего не работает, причем не аботает если длина строки больше 8, но это понятно т.к. алгоритм шифрует токма по 8 байт

    вот код
    procedure TForm1.Button1Click(Sender: TObject);
    Var s1:TMemoryStream;
       buf:PChar;
       s:String;
       l:Integer;
    begin
     s1:=TMemoryStream.Create;
     s:=Edit1.Text;
     buf:=StrAlloc(Length(s)+1);
     buf:=StrPCopy(buf,s);
     s1.Write(buf[0],Length(buf));
     s1.position:=0;
     EncryptStream(s1,s1.Size,'privet');
     s1.Position:=0;
     StrDispose(buf);
     Buf:=strAlloc(s1.Size+1);
     s1.Read(buf[0],s1.size);
     buf[s1.Size]:=Char(0);

     Label1.Caption:=buf;
     //
     l:=s1.Size;
     s1.Size:=0;
     s1.Position:=0;
     s1.Write(buf[0],l);
     //

     DecryptStream(s1,s1.Size,'privet');
     strDispose(buf);
     Buf:=StrAlloc(s1.Size+1);
     s1.Read(buf[0],s1.size);
     buf[s1.Size]:=chr(0);
     Label2.Caption:=StrPas(buf);
     StrDispose(buf);
    end;
  • Palladin © (26.05.08 17:14) [1]
    объявление EncryptStream и DecryptStream приведи
  • 9899100 (26.05.08 17:22) [2]

    > Palladin

    я в посте сверху пложил ссылку на текст модуля
    он в принципе не большой если нада могу кинуть
  • Palladin © (26.05.08 17:23) [3]
    мог посмотреть, не просил бы, не нужен весь модуль, просто объявления
  • 9899100 (26.05.08 17:27) [4]
    function EncryptStream(DataStream: TStream; Count: Int64; Key: string): Boolean;
    function DecryptStream(DataStream: TStream; Count: Int64; Key: string): Boolean;

    там есть пример
    работает как часы
    а вот почему не работает моя процедура :((
    уже весь лоб об стену разбил :)

    procedure TForm1.Button1Click(Sender: TObject);
    var
     SourseStream : TFileStream;
    begin
    SourseStream := TFileStream.Create(Edit1.Text, fmOpenReadWrite );
    EncryptStream(SourseStream, SourseStream.Size, Edit2.Text);
    SourseStream.Free;
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    var
     SourseStream : TFileStream;
    begin
    SourseStream := TFileStream.Create(Edit1.Text, fmOpenReadWrite );
    DecryptStream(SourseStream, SourseStream.Size, Edit2.Text);
    SourseStream.Free;
    end;
  • Palladin © (26.05.08 17:33) [5]
    Function EncryptString(Const s,p_strKey:String):String;
    Var
     m:TMemoryStream;
    Begin
     m:=TMemoryStream.Create;
     Try
      m.Write(s[1],Length(s));
      m.Seek(0,soFromBeginning);
      EncryptStream(m,Length(s),p_strKey);
      m.Seek(0,soFromBeginning);
      SetLength(Result,m.Size);
      m.Read(Result[1],m.Size);
     Finally
      m.Free;
     End;
    End;

    Function DecryptString(Const s,p_strKey:String):String;
    Var
     m:TMemoryStream;
    Begin
     m:=TMemoryStream.Create;
     Try
      m.Write(s[1],Length(s));
      m.Seek(0,soFromBeginning);
      DecryptStream(m,Length(s),p_strKey);
      m.Seek(0,soFromBeginning);
      SetLength(Result,m.Size);
      m.Read(Result[1],m.Size);
     Finally
      m.Free;
     End;
    End;



    пробуй
  • 9899100 (26.05.08 17:37) [6]
    твои работают
    так в чем моя ошибка то???
  • Palladin © (26.05.08 17:40) [7]
    в том, что ты пытаешься пятнадцать раз перелить из пустого в порожнее и скорее всего где то на девятом спотыкаешься. вникать в твой код - у меня нет никакого желания, я привел так как должно быть, твоя задача, если интересно, проанализировать свой на предмет тараканов, в любом случае плюнуть и сказать мене пасиба :)
  • brrr (26.05.08 17:41) [8]
    SourseStream := TFileStream.Create(Edit1.Text, fmOpenReadWrite );
    тут копай
  • 9899100 (26.05.08 17:45) [9]

    > Palladin

    тебе то спасиба  я не спорю
    но вопрос то был гиде моя ошибка
    :)
    но я её всетаки нашел !!!!
    от тута
    s1.Write(buf[0],l);
    .... от тут надо перемещать на 0
    DecryptStream(s1,s1.Size,'privet');
    .... и тут тоже :)
 
Конференция "Основная" » помогите найти ошибку
Есть новые Нет новых   [134491   +8][b:0][p:0.001]