-
люди помогите найти ошибку, плииз, целый день бьюсь и бестолку вот скачал со страницы 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;
-
объявление EncryptStream и DecryptStream приведи
-
> Palladin
я в посте сверху пложил ссылку на текст модуля он в принципе не большой если нада могу кинуть
-
мог посмотреть, не просил бы, не нужен весь модуль, просто объявления
-
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;
-
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; пробуй
-
твои работают так в чем моя ошибка то???
-
в том, что ты пытаешься пятнадцать раз перелить из пустого в порожнее и скорее всего где то на девятом спотыкаешься. вникать в твой код - у меня нет никакого желания, я привел так как должно быть, твоя задача, если интересно, проанализировать свой на предмет тараканов, в любом случае плюнуть и сказать мене пасиба :)
-
SourseStream := TFileStream.Create(Edit1.Text, fmOpenReadWrite ); тут копай
-
> Palladin
тебе то спасиба я не спорю но вопрос то был гиде моя ошибка :) но я её всетаки нашел !!!! от тута s1.Write(buf[0],l); .... от тут надо перемещать на 0 DecryptStream(s1,s1.Size,'privet'); .... и тут тоже :)
|