السلام عليكم اخواني
لدي مشروع لتشفير الملفات لكني لم اعرف الطريقة لكي ابدأ ممكن احد يعلمني وساكون له شاكرا
والسلام عليكم
السلام عليكم اخواني
لدي مشروع لتشفير الملفات لكني لم اعرف الطريقة لكي ابدأ ممكن احد يعلمني وساكون له شاكرا
والسلام عليكم
تشفير ملفات !
اذكر تفاصيل اكثر عن المشروع
تم تعديل هذه المشاركة بواسطة B.M.AbdelAziZ في 20 فبراير 2008 في 19:42 — السبب: تصفير ملفات!
بسم الله الرحمن الرحيم
طلبك غير واضح أذكر المزيد من المعلومات

It doesn't matter how slow you go, as long as you don't stop
انا اريد ان اقوم بعمل برنامج لتشفير الملفات الغير المضغوطة ولكنني لم اعرف فانا لازلت مبتدأ في البرمجة ولكن ان ان تم ارشادي سوف اقوم بالتطبيق
وان اردت نمودج للشكل فانا مستعد لأضافته والف شكر لكم
سوف اصمم الشكل وارسله لكم
أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر
وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري
كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو
أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري
عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري
فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري
السلام عليكم اخي romanof
انا قلت لك مبتدأ في الديلفي ولا استطيع ان اعرف عن Crypto API +Delphi شيئا ولكن ان اعطيتني تعريفا لها سأكون شاكرا لك
اما صورة المشروع فهي في رد قادم ان شاء الله
ابحث في النت عن شي اسمه Crypto API +Delphi
من ناحية دوال الAPI الخاصة بالتشفير اقرا في المرفقات طبعا الملف فيه امثلة بالسي
اظن انه سيفيدك جدا
http://irsoft.de/web/Delphi-MD5
وهذا مثال لتشفير الملفات بدلفي
procedure TMainForm.BitBtn1Click(Sender: TObject);
var
hProv: HCRYPTPROV;
KeyExchKey, SessionKey: HCRYPTKEY;
flag, keyLen: DWORD;
infile, outfile: file;
tmp: PBYTE;
buf: array[0..511] of byte;
alg: ALG_ID;
stream: boolean;
begin
…
подключение к криптопровайдеру
…
if ActionRadioGroup.ItemIndex = 0 {шифрование} then
begin
OpenDlg.Title := 'Укажите файл для шифрования';
if OpenDlg.Execute then
AssignFile(infile, OpenDlg.FileName)
else
exit;
OpenDlg.Title := 'Укажите файл с открытым ключом обмена ключами получателя';
if OpenDlg.Execute then
begin
AssignFile(outfile, OpenDlg.FileName);
reset(outfile, 1);
keyLen := FileSize(outfile);
GetMem(tmp, keyLen);
BlockRead(outfile, tmp^, keyLen);
CloseFile(outfile);
end
else
exit;
CryptImportKey(hProv, tmp, keyLen, 0, 0, @KeyExchKey);
FreeMem(tmp, keyLen);
SaveDlg.Title := 'Задайте имя файла для зашифрованных данных';
if SaveDlg.Execute then
AssignFile(outfile, SaveDlg.FileName)
else
exit;
rewrite(outfile, 1);
case AlgRadioGroup.ItemIndex of {установка алгоритма шифрования}
0:
begin
alg := CALG_RC2; {алгоритм RC2}
stream := false; {блочный шифр}
end;
1:
begin
alg := CALG_RC4; {алгоритм RC4}
stream := true; {поточный шифр}
end;
end;
CryptGenKey(hProv, alg, CRYPT_EXPORTABLE or CRYPT_CREATE_SALT, @SessionKey);
{создание сеансового ключа}
keyLen := 128; {размер буфера "с запасом"}
GetMem(tmp, keyLen);
CryptExportKey(SessionKey, KeyExchKey, SIMPLEBLOB, 0, tmp, @keyLen);
BlockWrite(outfile, keyLen, 4); {запись в файл размера ключа}
BlockWrite(outfile, tmp^, keyLen); {и самого зашифрованного ключа}
CryptDestroyKey(KeyExchKey);
keyLen := 512; {размер буфера "с запасом"}
CryptGetKeyParam(SessionKey, KP_SALT, @buf, @keyLen, 0);
BlockWrite(outfile, keyLen, 4); {запись в файл размера солта}
BlockWrite(outfile, buf, keyLen); {и самого солт-значения}
if not stream then {если шифр - блочный}
begin
//генерируем IV
keyLen := 512; {размер буфера "с запасом"}
// запрос IV ради выяснения его размера
CryptGetKeyParam(SessionKey, KP_IV, @buf, @keyLen, 0);
CryptGenRandom(hProv, keyLen, @buf); {генерация IV}
CryptSetKeyParam(SessionKey, KP_IV, @buf, 0);
BlockWrite(outfile, keyLen, 4); {запись в файл размера IV}
BlockWrite(outfile, buf, keyLen); {и самого IV}
end;
reset(infile, 1);
while not eof(infile) do
begin {собственно шифрование и запись в файл}
BlockRead(infile, buf, 496, keyLen);
CryptEncrypt(SessionKey, 0, eof(infile), 0, @buf, @keyLen, 512);
BlockWrite(outfile, buf, keyLen);
end;
CloseFile(infile);
CloseFile(outfile);
CryptDestroyKey(SessionKey);
end
else {расшифровывание}
begin {получаем дескриптор своего ключа обмена ключами}
CryptGetUserKey(hProv, AT_KEYEXCHANGE, @KeyExchKey);
OpenDlg.Title := 'Укажите файл с зашифрованными данными';
if OpenDlg.Execute then
AssignFile(infile, OpenDlg.FileName)
else
exit;
reset(infile, 1);
BlockRead(infile, keyLen, 4); {читаем размер ключа}
GetMem(tmp, keyLen);
BlockRead(infile, tmp^, keyLen); {читаем сам ключ}
CryptImportKey(hProv, tmp, keyLen, KeyExchKey, 0, @SessionKey);
FreeMem(tmp, keyLen);
CryptDestroyKey(KeyExchKey);
BlockRead(infile, keyLen, 4); {читаем солт-значение}
BlockRead(infile, buf, keyLen);
CryptSetKeyParam(SessionKey, KP_SALT, @buf, 0);
keyLen := 4; {выясняем алгоритм шифрования}
CryptGetKeyParam(SessionKey, KP_ALGID, @alg, @keyLen, 0);
case alg of
CALG_RC2: stream := false;
CALG_RC4: stream := true;
end;
if not stream then {если шифр - блочный}
begin
//читаем и устанавливаем IV
BlockRead(infile, keyLen, 4);
BlockRead(infile, buf, keyLen);
CryptSetKeyParam(SessionKey, KP_IV, @buf, 0);
end;
SaveDlg.Title := 'Задайте имя файла для расшифрованных данных';
if SaveDlg.Execute then
begin
AssignFile(outfile, SaveDlg.FileName);
rewrite(outfile, 1);
while not eof(infile) do
begin {собственно расшифровывание}
BlockRead(infile, buf, 512, keyLen);
CryptDecrypt(SessionKey, 0, eof(infile), 0, @buf, @keyLen);
BlockWrite(outfile, buf, keyLen);
end;
CloseFile(outfile);
end;
CloseFile(infile);
CryptDestroyKey(SessionKey);
end;
CryptReleaseContext(hProv, 0);
end;أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر
وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري
كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو
أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري
عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري
فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري
المثال السابق اخذته من احد المواقع الروسية
اما اذا كنت مبتدئ في الدلفي اقرا عن الدلفي ...انا ايضا مبتدئ ولا يغرك اللقب مشرف هذا مجرد عمل تنظيمي
ثانيا حكاية مبتديء في ال Crypto API
كلنا مبتدؤن ولا اعرف عنها غير القليل وها انذا اعطيتك اسماء الاشياء البدائية
اقرا عن دلفي وعن اساسياتها في المواضيع المثبته في موضوع الكتب
اما عن اساسيات التشفير بواسطة الAPI او Crypto API
فابحث في النت عن هذه الاشياء وستجد الكثير
ابحث عن اشياء مثل
CryptImportKey
CryptGenKey
CryptExportKey
بعد قليل سارفق لك كتيب يتحدث عنها ولكنه اكواده بالسي
أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر
وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري
كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو
أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري
عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري
فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري
شكرا لك اخي على المرور وان شاء الله سابحث
هذا هو رابط الكتيب
أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر
وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري
كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو
أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري
عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري
فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري
مثال اخر لتشفير ملف بدلفي فقط دزن استخدام الAPI
unit EZCrypt;
{modeled by Ben Hochstrasser(bhoc@surfeu.ch) after some code snippet from borland}
interface
uses Windows, Classes;
type
TWordTriple = Array[0..2] of Word;
function FileEncrypt(InFile, OutFile: String; Key: TWordTriple): boolean;
function FileDecrypt(InFile, OutFile: String; Key: TWordTriple): boolean;
function TextEncrypt(const s: string; Key: TWordTriple): string;
function TextDecrypt(const s: string; Key: TWordTriple): string;
function MemoryEncrypt(Src: Pointer; SrcSize: Cardinal; Target: Pointer; TargetSize: Cardinal; Key: TWordTriple): boolean;
function MemoryDecrypt(Src: Pointer; SrcSize: Cardinal; Target: Pointer; TargetSize: Cardinal; Key: TWordTriple): boolean;
implementation
function MemoryEncrypt(Src: Pointer; SrcSize: Cardinal; Target: Pointer; TargetSize: Cardinal; Key: TWordTriple): boolean;
var
pIn, pOut: ^byte;
i : Cardinal;
begin
if SrcSize = TargetSize then
begin
pIn := Src;
pOut := Target;
for i := 1 to SrcSize do
begin
pOut^ := pIn^ xor (Key[2] shr 8);
Key[2] := Byte(pIn^ + Key[2]) * Key[0] + Key[1];
inc(pIn);
inc(pOut);
end;
Result := True;
end else
Result := False;
end;
function MemoryDecrypt(Src: Pointer; SrcSize: Cardinal; Target: Pointer; TargetSize: Cardinal; Key: TWordTriple): boolean;
var
pIn, pOut: ^byte;
i : Cardinal;
begin
if SrcSize = TargetSize then
begin
pIn := Src;
pOut := Target;
for i := 1 to SrcSize do
begin
pOut^ := pIn^ xor (Key[2] shr 8);
Key[2] := byte(pOut^ + Key[2]) * Key[0] + Key[1];
inc(pIn);
inc(pOut);
end;
Result := True;
end else
Result := False;
end;
function TextCrypt(const s: string; Key: TWordTriple; Encrypt: Boolean): string;
var
bOK: Boolean;
begin
SetLength(Result, Length(s));
if Encrypt then
bOK := MemoryEncrypt(PChar(s), Length(s), PChar(Result), Length(Result), Key)
else
bOK := MemoryDecrypt(PChar(s), Length(s), PChar(Result), Length(Result), Key);
if not bOK then Result := '';
end;
function FileCrypt(InFile, OutFile: String; Key: TWordTriple; Encrypt: Boolean): boolean;
var
MIn, MOut: TMemoryStream;
begin
MIn := TMemoryStream.Create;
MOut := TMemoryStream.Create;
Try
MIn.LoadFromFile(InFile);
MOut.SetSize(MIn.Size);
if Encrypt then
Result := MemoryEncrypt(MIn.Memory, MIn.Size, MOut.Memory, MOut.Size, Key)
else
Result := MemoryDecrypt(MIn.Memory, MIn.Size, MOut.Memory, MOut.Size, Key);
MOut.SaveToFile(OutFile);
finally
MOut.Free;
MIn.Free;
end;
end;
function TextEncrypt(const s: string; Key: TWordTriple): string;
begin
Result := TextCrypt(s, Key, True);
end;
function TextDecrypt(const s: string; Key: TWordTriple): string;
begin
Result := TextCrypt(s, Key, False);
end;
function FileEncrypt(InFile, OutFile: String; Key: TWordTriple): boolean;
begin
Result := FileCrypt(InFile, OutFile, Key, True);
end;
function FileDecrypt(InFile, OutFile: String; Key: TWordTriple): boolean;
begin
Result := FileCrypt(InFile, OutFile, Key, False);
end;أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر
وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري
كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو
أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري
عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري
فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري
استخدم حواريزمية Rijndael / AES احسن
http://www.iaik.tugraz.at/RESEARCH/krypto/...ijmen/rijndael/
سارفق مثال...
والله اخي عبد العزيز لم افهم اكثر ممكن تشرح بالصور
فانا لا تجيد الانجليزية جيدا ارجوك اشرح خطوة خطوة وبالصور
لا حول ولاقوة الا بالله العلي العظيم
حسبي الله ونعم الوكيل
لا اله الا انت سبحانك اني كنت من الظالمين
أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر
وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري
كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو
أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري
عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري
فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري
انها برمجة ولايمكن ترجمتها للعربية ولا شرحها بالصوررجل الصعاب كتب:لم افهم اكثر ممكن تشرح بالصورفانا لا تجيد الانجليزية جيدا ارجوك اشرح خطوة خطوة وبالصور