|
Registriert seit: 13. Aug 2006 3 Beiträge |
#5
Danke
![]() hier der Code, viel spass beim anschauen. habe keine Comments drin. Teilweise ist es ein wenig unübersichtlich(nicht kommentiert) An manchen Stellen werde ich den Code noch optimieren, und überflüssige kommentare löschen.
Delphi-Quellcode:
function primzerleg(zahl:integer):string;
var prims:array[0..30] of integer; check,rest,i,teiler:integer; strea,dat,src:string; begin prims[0]:=2; prims[1]:=3; prims[2]:=5; prims[3]:=7; prims[4]:=11; prims[5]:=13; prims[6]:=17; prims[7]:=19; prims[8]:=23; prims[9]:=29; prims[10]:=31; prims[11]:=37; prims[12]:=41; prims[13]:=43; prims[14]:=47; prims[15]:=53; prims[16]:=59; prims[17]:=61; prims[18]:=67; prims[19]:=71; prims[20]:=73; prims[21]:=79; prims[22]:=83; prims[23]:=89; prims[24]:=97; prims[25]:=101; prims[26]:=103; prims[27]:=107; prims[28]:=109; prims[29]:=113; prims[30]:=127; result:=''; i:=0; check:=0; rest:=0; repeat rest:= zahl mod prims[i]; if rest = 0 then begin zahl:=zahl div prims[i]; result:=result+inttostr(prims[i]); if zahl = 1 then begin check:=1; end; end else begin i:=i+1; end; until check = 1; end; procedure TMain.Generate_KeyClick(Sender: TObject); var a,i:integer; x,add:string; begin if KeyEingabe.Text<>'' then begin checksum.Clear; for I := 1 to Length(KeyEingabe.Text) do begin a:=ORD(KeyEingabe.text[i]); ADD:=primzerleg(a); checksum.Text:=checksum.Text+(ADD); end; Button1.SetFocus; end else begin Application.MessageBox('Please Enter A Password and click on "Generate Key"','Error',MB_OK + MB_ICONWARNING); keyEingabe.SetFocus; end; end; procedure TMain.Button1Click(Sender: TObject); begin if opendialog1.Execute then begin kfp.Text:=opendialog1.FileName; Encrypt.SetFocus; end; end; procedure TMain.FormCreate(Sender: TObject); begin Main.Width:=1024; Encrypt.Clear; theresult.Clear; decrypt.Clear; end; procedure TMain.StartClick(Sender: TObject); var Source,Data,Stream:TMemoryStream; var resz,Str:String; var Y,B:Byte; var z,drei,zw,res,dl,i,wait,x:integer; var mem:TMemo; begin if checksum.Text='' then begin Application.MessageBox('Please Enter A Password and click on "Generate Key"','Error',MB_OK + MB_ICONWARNING); Keyeingabe.SetFocus; end else begin if kfp.Text='' then begin Application.MessageBox('Please Select a Keyfile!','Error',MB_OK + MB_ICONWARNING); Button1.SetFocus; end else begin theresult.Clear; Stream:=TMemoryStream.Create; Stream.LoadFromFile(kfp.Text); try i:=1; dl:=1; wait:=0; x:=0; z:=0; if text_mode.Checked then begin if encrypt.Text='' then begin Application.MessageBox('Please enter a Text to encrypt it!','Error',MB_OK + MB_ICONWARNING); encrypt.SetFocus; end else begin While i<=Length(Encrypt.Text) do begin repeat Stream.ReadBuffer(B,SizeOf(B)); if wait = 0 then begin i:=i+1; res:=B+ORD(Encrypt.text[i-1]); theresult.Text:=theresult.Text+IntToHex(res,3); if x*2 <= length(Checksum.Text)-2 then begin x:=x+1; wait:=StrToInt(checksum.Text[x*2])+StrToInt(checksum.Text[x*2-1]); end else begin x:=1; wait:=StrToInt(checksum.Text[x*2])+StrToInt(checksum.Text[x*2-1]); end; end else begin wait:=wait-1; end; if Stream.Position>=Stream.Size then Stream.Position:=0 until wait > 0; end; end; end else if file_mode.Checked then begin if opendialog1.FileName<>'' then begin if savedialog1.execute then begin Source:=TMemoryStream.Create; Source.LoadFromFile(Encrypt.Text); Data:=TMemoryStream.Create; progressbar1.Visible:=true; progressbar1.Min:=0; progressbar1.Max:=Source.Size; Mem:=TMemo.Create(Main); While source.Position<source.Size do begin Stream.Read(B,SizeOf(B)); progressbar1.Position:=Source.Position; Source.Read(Y,SizeOF(Y)); res:=B+Y; str:=IntToHex(res,3); For i:=1 to 3 do begin res:=Ord(str[i]); Data.Write(res,1); end; if x*2 <= length(Checksum.Text)-2 then begin x:=x+1; wait:=StrToInt(checksum.Text[x*2])+StrToInt(checksum.Text[x*2-1]); end else begin x:=1; wait:=StrToInt(checksum.Text[x*2])+StrToInt(checksum.Text[x*2-1]); end; if Stream.Position>=Stream.Size-wait then begin Stream.Position:=0; end else begin Stream.Position:=Stream.Position+wait; end; end; Data.SaveToFile(savedialog1.FileName); theresult.Text:=Savedialog1.FileName; Source.Free; end; end else begin Application.MessageBox('Please select a File which you want to encrypt!','Error',MB_OK + MB_ICONWARNING); File_Search.SetFocus; end; end; finally Stream.Free; progressbar1.Visible:=false; end; end; end; end; procedure TMain.dcrptClick(Sender: TObject); var Source,Data,Stream:TFileStream; var resz,Str:String; var Y,B:Byte; var hex,z,zw,res,dl,i,wait,x:integer; begin if checksum.Text='' then begin Application.MessageBox('Please Enter A Password and click on "Generate Key"','Error',MB_OK + MB_ICONWARNING); Keyeingabe.SetFocus; end else begin if kfp.Text='' then begin Application.MessageBox('Please Select a Keyfile!','Error',MB_OK + MB_ICONWARNING); Button1.SetFocus; end else begin if decrypt.Text='' then begin Application.MessageBox('Please enter a Text to decrypt it!','Error',MB_OK + MB_ICONWARNING) end else begin theresult.Clear; Stream:=TFileStream.Create(kfp.text,fmOpenRead); try i:=1; wait:=0; x:=0; if text_mode.Checked then begin if decrypt.Text='' then begin Application.MessageBox('Please enter a Text to encrypt it!','Error',MB_OK + MB_ICONWARNING); encrypt.SetFocus; end else begin While i<=(Length(Decrypt.Text)div 3) do begin repeat Stream.ReadBuffer(B,SizeOf(B)); if wait = 0 then begin z:=i*3; Str:='$'+Decrypt.text[z-2]+Decrypt.text[z-1]+Decrypt.text[z]; zw:=StrToInt(Str); res:=zw-B; i:=i+1; theresult.Text:=theresult.Text+CHR(res); if x*2 <= length(Checksum.Text)-2 then begin x:=x+1; wait:=StrToInt(checksum.Text[x*2])+StrToInt(checksum.Text[x*2-1]); end else begin x:=1; wait:=StrToInt(checksum.Text[x*2])+StrToInt(checksum.Text[x*2-1]); end; end else begin wait:=wait-1; end; if Stream.Position>=Stream.Size then Stream.Position:=0 until wait > 0; end; end; end else if file_mode.Checked then begin if opendialog1.FileName<>'' then begin if savedialog1.Execute then begin Data:=TFilestream.Create(savedialog1.FileName,fmcreate); Source:=TFileStream.Create(decrypt.Text,fmOpenRead); progressbar1.Visible:=true; progressbar1.Min:=0; progressbar1.Max:=Source.Size; Data.Position:=0; Source.Position:=0; stream.Position:=0; While source.Position<source.Size do begin Stream.Read(B,SizeOf(B)); progressbar1.Position:=Source.Position; resz:='$'; For I:= 1 to 3 do begin Source.Read(Y,1); resz:=resz+CHR(Y); end; Y:=StrToInt(resz); res:=Y-B; resz:=IntToHex(res,2); resz:='$'+resz; Data.Write(res,1); if x*2 <= length(Checksum.Text)-2 then begin x:=x+1; wait:=StrToInt(checksum.Text[x*2])+StrToInt(checksum.Text[x*2-1]); end else begin x:=1; wait:=StrToInt(checksum.Text[x*2])+StrToInt(checksum.Text[x*2-1]); end; if Stream.Position>=Stream.Size-wait then begin Stream.Position:=0 end else begin Stream.Position:=Stream.Position+wait; end; end; end; end; theresult.Text:=Savedialog1.FileName; end; finally Stream.Free; Data.Free; Source.Free; progressbar1.Visible:=false; end; end; end; end; end; |
![]() |
Ansicht |
![]() |
![]() |
![]() |
ForumregelnEs ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus. Trackbacks are an
Pingbacks are an
Refbacks are aus
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
![]() |
![]() |