Fájlok titkosítása egy jelszóval a Delphi (forráskód, download) - szoftverek

A jobb érthetőség kedvéért a táblázatban, én nem adja számkód jelszavát betűk, én egyszerűen rámutatni a betűk magukat. Természetesen az leveleket utal a számkód.

Az algoritmus, mint ismert, most meg kell gondolni a funkciókat, hogy titkosítja bájtokká lépésekben. A legegyszerűbb módja az, hogy RRF és xn dx. Íme:

Ez a módszer azért figyelemre méltó, hogy nem szükséges, hogy hozzon létre olyan módon visszafejteni, mert decryptor Ksor - ez ugyanaz RRF.

xk: = xn xor dx;
XDK: = xk xor dx;

Mindezek után manipulációk XDK továbbra xn. Következésképpen dekódolásához nem kell, hogy hozzon létre egy decryptor.

Titkosítás Ksor primitív és egyszerű. Van egy jobb módszer. Akkor csak a kezdeti érték byte dx hozzáadott értéket és kivonni a megfejtése. Azt hiszem, ez a módszer jobb és eredeti. De itt is van egy bökkenő. A probléma az, hogy a maximális érték 28 bájt 256, de van még egy nullát, akkor a tartomány bájtértékeket [0..255]. Ezért, ha a kezdeti értéke byte egyenlő 245, és a növekmény 45, és ha megállapítják a fordulat 290 és a feladat a változó értékét mérete byte túlcsordulás következik be, és egyszerűen kijelölheti azt 0. Van egy módja: akkor egyszerűen a fennmaradó 256. értelmezésénél hátha dx több mint xn, akkor egyszerűen kivonni az elsőt xn dx, majd adjunk hozzá 256 e két funkciója van:

funkción kívül (xn, dx: byte): byte;
kezdődik
Eredmény: = (xn + dx) mod 256;
végén;

funkció mínusz (xn, dx: byte): byte;
kezdődik
ha xn> = dx majd
Eredmény: = xn-dx
más
Eredmény: = xn-dx + 256;
végén;

Tehát van kriptor és decryptor. Most kezdjük el beírni magukat a funkciót titkosítás és dekódolás.

Először írási kriptor.

Funkció CriptFile (
SourceFile: string; // valószínűleg
DestFile: string; // ez érthető
Jelszó: string; // jelszó titkosítás
Flags: DWORD; // flags műveletek
aGauge: pointer // mutató haladást
): Boole;
címke
1; // hasznos
var
DestHFile, SourceHFile: THandle;
FSize, i, j, KL, N: DWORD;
CurrentByte: byte;
one_byte_mass, all_mass: real;
kezdődik
Eredmény: = false;
KL: = hossz (jelszó);

ACF_AutoRename: = (Zászlók és CF_AutoRename) = CF_AutoRename;
ACF_DeleteSource: = (Zászlók és CF_DeleteSource) = CF_DeleteSource;
ACF_Dest_NOT_CREATE: = (Zászlók és CF_Dest_NOT_CREATE) = CF_Dest_NOT_CREATE;
ACF_ShowProgress: = (Zászlók és CF_ShowProgress) = CF_ShowProgress;

Ez feldolgozza a zászlókat, hogy megkaptuk, majd feldolgozza azokat. CF_ * állandók és a változók ACF_ * fogom leírni később.

Itt fogom magyarázni részletesebben. Állandó CF_Dest_NOT_CREATE említett funkciót, ami szükséges, hogy titkosítja a kívánt fájlt, azaz a kívánt fájlt, és a cél fájl azonos. Azonban a közbenső fájlra van szükség minden esetben, így hozunk létre a C meghajtón, majd mi váltja ki a kívánt fájlt ezt a köztes, közbenső, majd távolítsa el.

all_mass: = 0; // ez a változó igény előrehaladás
SourceHFile: = CreateFile (pchar (SourceFile), GENERIC_READ, FILE_SHARE_READ, nulla, OPEN_EXISTING, 0,0);
ha SourceHFile = INVALID_HANDLE_VALUE majd
Kilépés;
DestHFile: = CreateFile (pchar (DestFile), GENERIC_WRITE, FILE_SHARE_READ, nulla, CREATE_ALWAYS, 0,0);
ha DestHFile = INVALID_HANDLE_VALUE majd
Kilépés;
FSize: = GetFileSize (SourceHFile, nulla);
ha ACF_ShowProgress majd
ha aGauge = nil majd

ACF_ShowProgress: = false
más
<всё правильно: гаугэ указали, получаем вес одного байта в прогрессе гаугэ>
one_byte_mass: = (TGauge (aGauge ^) MAXVALUE-TGauge (aGauge ^) MINVALUE ..) / FSize;

Aztán ott van egy algoritmus, különbözik attól, amit már rámutatott az elején, de nem ugyanaz a dolog, csak gyorsabb. Ez gyorsabb, mert nem számol a karakterek számát kell venni a jelszót, úgy ez önmagában száma szerint ismételje meg a belső hurok.

i: = 1-től (FSize div kl) +1 do
j: = 1 a KL do
kezdődik
Readfile (SourceHFile, CurrentByte, 1, n, 0);

ha n = 0, akkor Goto 1;
CurrentByte: = plus (CurrentByte, ORD (jelszó [j]));
WriteFile (DestHFile, Currentbyte, 1, n, 0);
ha ACF_ShowProgress majd
kezdődik
all_mass: = all_mass + one_byte_mass;
TGauge (aGauge ^) Haladás: = round (all_mass) ;.
végén;
végén;
1:

Itt vannak a konstansok, hogy én használt ez a funkció (azok módosítása nem ajánlott):

const
CF_AutoRename = $ 00000001;
CF_DeleteSource = $ 00000002;
CF_Dest_NOT_CREATE = $ 00000008;
CF_ShowProgress = $ 00000010;

var
ACF_AutoRename: logikai;
ACF_DeleteSource: logikai;
ACF_Dest_NOT_CREATE: logikai;
ACF_ShowProgress: logikai;
Meg kell leírni, mint ez: állandó akár végrehajtás, valamint a változók után.

Funkciót. DeCriptFile Nem írom le, mert ez pontosan ugyanaz, csak két különbség:

és persze:
CurrentByte: = mínusz (CurrentByte, ORD (jelszó [j]));

Apropó zászlókat. Ezek kombinálhatók a vagy az üzemeltető.
Itt egy példa segítségével ezeket a funkciókat:

eljárás TForm1.Button1Click (Sender: TObject);
kezdődik
CriptFile (Edit1.Text, "" 123”, CF_AutoRename vagy CF_ShowProgress vagy
CF_DeleteSource, @ Gauge1);
végén;

eljárás TForm1.Button2Click (Sender: TObject);
kezdődik
DeCriptFile (Edit2.Text, "" 123”, CF_AutoRename vagy
CF_ShowProgress, @ Gauge1);
végén;

Röviden mind utalnak a forráskódot. Minden ott van. Másolja ezt a modult Delphi windows share mappát adunk a uses FileCript modul és használja őket, hogy az egészségre.

Letöltések