Einzelnen Beitrag anzeigen

CNV

Registriert seit: 13. Aug 2006
3 Beiträge
 
#5

Re: CNV-Encryption(Verschlüsselung)

  Alt 13. Aug 2006, 18:41
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;
  Mit Zitat antworten Zitat