المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : Simple Encrypt


STRELiTZIA
22-03-2008, 04:32 PM
السلام عليكم و رحمة الله
طريقة بسيطة لتشفير اي ملف و حل تشفيره
الملفات المصدرية مرفقة


(*
Simple Encrypt for Educational use
Coded By STRELiTZIA 03/22/2008
---
You can change code and use it WITHOUT REMOVE MY NAME :)
---

"OnClick Button Action"
procedure EncrOrDecr(_InPutFile, _OutPutFile: string; Key [Simple integer Key], Param [1 = Encrypt] [2 = Decrypt] [Other = Nothing]: integer);
*)


unit MainFrm;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Gauges, ExtCtrls, jpeg;

type
TMain = class(TForm)
OpenDialog: TOpenDialog;
SaveDialog: TSaveDialog;
Pnl: TPanel;
ProgressGge: TGauge;
KeyEdt: TEdit;
KeyLbl: TLabel;
OutPutFileEdt: TEdit;
InPutFileEdt: TEdit;
OpenBtn: TButton;
InPutFileLbl: TLabel;
OutPutFileLbl: TLabel;
SeparatorLbl: TLabel;
CoderLbl: TLabel;
LogoImg: TImage;
EncryptBtn: TButton;
DecryptBtn: TButton;
procedure OpenBtnClick(Sender: TObject);
procedure KeyEdtKeyPress(Sender: TObject; var Key: Char);
procedure EncryptBtnClick(Sender: TObject);
procedure DecryptBtnClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Main: TMain;

implementation
uses XpMan; (* <<-- For Windows Xp Look :) *)
{$R *.dfm}

(* __________________________________________________ ____*)

procedure EncrOrDecr(_InPutFile, _OutPutFile: string; Key (* Simple integer Key *), Param (* [1 = Encrypt] [2 = Decrypt] [Other = Nothing] *): integer);
var
InPutFileStream, OutPutFileStream: TFileStream;
_ReadBuffer, _WriteBuffer: Char;
i: integer;
begin

InPutFileStream := TFileStream.Create(_InPutFile, FmOpenRead); (* Create FileStream and Open our file in Read mode *)
OutPutFileStream := TFileStream.Create(_OutPutFile, FmOpenWrite or FmCreate or FmSharedEnyWrite); (* Create new FileStream for our new file in write mode *)

Main.ProgressGge.MaxValue := InPutFileStream.Size; (* Initialization to InPutFile Size *)

for i := 0 to InPutFileStream.Size - 1 do
begin
InPutFileStream.Read(_ReadBuffer, SizeOf(_ReadBuffer));

case Param of
1: begin _WriteBuffer := Char(Pchar(_ReadBuffer) + Key); (* if Param = 1 Encrypt called *) end;
2: begin _WriteBuffer := Char(Pchar(_ReadBuffer) - Key); (* if Param = 2 Decrypt called *) end;
end;
Main.ProgressGge.Progress := Main.ProgressGge.Progress + 1;
OutPutFileStream.Write(_WriteBuffer, SizeOf(_WriteBuffer));
end;
ShowMessage('Complete... :) [Simple Encrypt fo EDUCATIONAL USE]');
InPutFileStream.Free;
OutPutFileStream.Free;
Main.ProgressGge.Progress := 0; (* Reset *)

end;
(* __________________________________________________ ____*)

procedure TMain.OpenBtnClick(Sender: TObject);
begin
if Opendialog.Execute then
begin
InPutFileEdt.Text := OpenDialog.FileName;
OutPutFileEdt.Text := OpenDialog.FileName + '.Out';
end;
end;
(* __________________________________________________ ____*)

procedure TMain.KeyEdtKeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9', #8]) then Key := #0; (* Accept only number [#8 for Remove key] *)
end;
(* __________________________________________________ ____*)

procedure TMain.EncryptBtnClick(Sender: TObject);
begin
if (InPutFileEdt.Text <> '') and (OutPutFileEdt.Text <> '') and (KeyEdt.Text <> '') then
EncrOrDecr(InPutFileEdt.Text, OutPutFileEdt.Text, StrToInt(KeyEdt.Text), 1) else (* Param = 2 [ENCRYPT]*)
ShowMessage('ERROR : [Informations missing]');
end;
(* __________________________________________________ ____*)

procedure TMain.DecryptBtnClick(Sender: TObject);
begin
if (InPutFileEdt.Text <> '') and (OutPutFileEdt.Text <> '') and (KeyEdt.Text <> '') then
EncrOrDecr(InPutFileEdt.Text, OutPutFileEdt.Text, StrToInt(KeyEdt.Text), 2) else (* Param = 2 [DECRYPT]*)
ShowMessage('ERROR : [Informations missing]');
end;
end.



بالتوفيق

مهدي
22-03-2008, 06:44 PM
و عليكم السلام و رحمة الله

مشروع ممتاز يحتاج خاصيتين ليصبح على أعلى مستوى.

لن أخبرك عنهما حتى تعدني بأن تبذل قصارى جهدك لتحقيقهما.

STRELiTZIA
22-03-2008, 07:50 PM
مشروع ممتاز يحتاج خاصيتين ليصبح على أعلى مستوى.
لن أخبرك عنهما حتى تعدني بأن تبذل قصارى جهدك لتحقيقهما


على عيني اخي مهدي :D
تحياتي

مهدي
22-03-2008, 08:16 PM
الخاصية الأولى:
منع تشفير ملف مشفر - أي يتم تشفير الملف مرة واحد و لا يقبل إلا حل التشفير.


الخاصية الثانية:
على البرنامج أن يتأكد من صحة كلمة مرور الملف المشفر حتى يقوم بحل التشفير، أما إذا كانت كلمة المرور خاطئة يمنعك من حل التشفير بكلمة مرور خاطئة أو فارغة بشرط.


سرعة الإستجابة في التأكد من صحة كلمة المرور حتى مع الملفات الكبيرة الحجم 200 ميجا بايت فأكثر


كان الله في عونك.

STRELiTZIA
24-03-2008, 12:30 PM
السلام عليكم و رحمة الله
- تشفير الملف المشفر يزيد من تعقيد محاولة كسره و معضم برامج التشفير تترك للمستعمل حرية هذة الخاصية لاستفادة منها. على كل حال يكون لك ذلك ان شاء الله :)

- في هذا المثال البسيط المرفق لا يتم حفظ الــ Key في الملف المشفر لانه يبدل ترتيب الــ Position لــ Characters بقيمة الــ Key يعني :
----
a تصبح b اذا كان الــ key يساوي 1 العمل فقط على الــ Character position
التشفير a + 1 = b
حل التشفير b - 1 = a
----
للفهم اكثر ننشئ ملف Text و نكتب فيه abcdefghijklmnopqrstuvwxyz ثم نقوم بتشفيره بــ key 1
و نقارن جيدا بين الملفين... POSITION CHARACTER

على كل حال يكون لك ذلك ان شاء الله :)

- سارفق ايظا طريقة عمل Hash لــ Key و Encryptage محترف للملفات مع ملفات مصدرية كمثال جديد و هو :
Blowfish, RijnDael

تحياتي

مهدي
24-03-2008, 06:52 PM
و معظم برامج التشفير تترك للمستعمل حرية هذة الخاصية لاستفادة منها


اجعل في البرنامج خانة اختيار Check Box للمستخدم.


لا يتم حفظ الــ Key في الملف المشفر


لعله في المستقبل نضيف لهذا المثال خاصية SFX التي تقوم بحفظ الملف الذي يحمل كلمة المرور في الملف نفسه.

Ahmed18
07-06-2008, 08:16 PM
بارك الله فيك :)