Yksinkertainen tiedoston salaus/salauksen purku.
Kommentteja en ole juurikaan lisännyt koodiin, mutta eiköhän tuon pitäisi aika selvä olla. :)
{ File crypting/decrypting... (Just a small demonstration) Compiled with FreePascal (Compiler version 1.0.6) Tp6/7 compliant with minor changes. (Changes listed in code.) Contact me @ Ice@Iname.Com --> Use only at your own risk <-- } Program Crypt; Uses Dos,Crt,SysUtils; {Use SysUtils only in Fpc} Const TemporaryFile = 'TFile.Tmp'; Var Dire : Boolean; FileName : String; Pass1,Pass2 : ShortString;{Use string at Tp} CFile,TFile : File; Buf : array[1..16384] of Char; NumRead,NumWritten : word; T,Tt,Tt2,TimesReaded : LongInt; Function FileExists(Name:String):Boolean; {Not necessary needed in Fp, cause function also in SysUtils-Unit} Var F : File; Begin {$i-} Assign (F,Name); Reset (F); {$I+} FileExists:=(IoResult=0) and (Name<>''); Close (f); End; Procedure CheckParameters; {Tarkistetaan parametrit} Begin If ParamStr(1)='?' Then Begin WriteLn('Using Crypt:'); WriteLn('Crypt FileName PassWord1 PassWord2 Direction'); WriteLn('Direction switches: '); WriteLn('+ : Crypt'); WriteLn('- : DeCrypt'); Halt; End; If ParamCount<>4 then Begin WriteLn('Wrong amount of parametres!!!'); WriteLn('Check help (Crypt ?)'); Halt; End; FileName:=ParamStr(1); Pass1:=ParamStr(2); Pass2:=ParamStr(3); End; Procedure CheckFileAndPass; {Tarkistetaan tiedoston olemassaolo ja salasanojen pituus} Begin If Not FileExists(FileName) Then Begin WriteLn('File not found!!! Check the filename and path'); Halt; End; If (Length(Pass1)<4)or(Length(Pass2)<4) Then Begin WriteLn('Both passwords must be atleast 4 characters or longer'); Halt; End; If ParamStr(4)='+' Then Dire:=True Else If ParamStr(4)='-' Then Dire:=False Else Begin WriteLn('Use + or - as direction switch'); Halt; End; End; Procedure Crypt; { Pistetään faili sekaisin Luku tempistä ja kirjoitus alkuperäiseen } Begin Tt:=1; Tt2:=1; TimesReaded:=0; Repeat TimesReaded:=TimesReaded+1; BlockRead(TFile, Buf, SizeOf(Buf), NumRead); For T:=1 to NumRead do Begin If Dire Then Buf[T]:=Chr(Ord(Buf[T])+ Ord(Pass1[Tt])- Ord(Pass2[Tt2])+ Ord('F')+Ord('i')-Ord('L')+Ord('e')- Ord('h')+Ord('E')-Ord('d')+Ord('E')) Else If not Dire Then Buf[T]:=Chr(Ord(Buf[T])- Ord(Pass1[Tt])+ Ord(Pass2[Tt2])- Ord('F')-Ord('i')+Ord('L')-Ord('e')+ Ord('h')-Ord('E')+Ord('d')-Ord('E')); Inc(Tt,1);If Tt>Length(Pass1) Then Tt:=1; Inc(Tt2,1);If Tt2>Length(Pass2) Then Tt2:=1; End; BlockWrite(CFile, Buf, NumRead, NumWritten); Write(' RT: ',TimesReaded,' NR: ',NumRead,' NW ',NumWritten); WriteLn(' : OK'); Until (NumRead = 0) or (NumWritten <> NumRead); End; Procedure OpenFiles; {Avataan kohde ja temppi tiedostot} Begin Assign(CFile,FileName); Assign(TFile,TemporaryFile); Reset(CFile,1); ReWrite(TFile,1); End; Procedure CopyToTemp; {Kopioidaan kohteesta temppiin} Begin Repeat BlockRead(CFile, Buf, SizeOf(Buf), NumRead); BlockWrite(TFile, Buf, NumRead, NumWritten); Until (NumRead = 0) or (NumWritten <> NumRead); Close(TFile); Close(CFile); Reset(CFile,1); Reset(TFile,1); End; Procedure CloseFiles; {suljetaan tiedostot ja poistetaan temppi tiedosto} Begin Close(CFile); Close(TFile); DeleteFile(Temporaryfile); { <-- Use with Fp} {Erase(TemporaryFile);} { <-- Use with Tp} End; BEGIN CheckParameters; CheckFileAndPass; OpenFiles; CopyToTemp; Crypt; CloseFiles; WriteLn('Its done!!!!'); END. { Haven't got time to test it properly. I tested with couple of files, and it seemed to work ok. Hopefully you get something out of this. Using in commandprompt Crypting: Crypt Filename PassWord1 PassWord2 + DeCrypting : Crypt FileName PassWord1 PassWord2 - }
Aika epäselvää koodia. Voisi olla rivinvaihtoja enemmän...
Aihe on jo aika vanha, joten et voi enää vastata siihen.