منتدى عالم الفنون
اهلا وسهلا عزيزى الزائر
اهلا وسهلا عزيزتى الزائره
ارجو انت تكون مسرور
انت غير مسجل فى المنتدى
الرجاء التسجيل
محاوظه عند التسجيل بالمنتدى
سوف ترسل لك رساله الى البريد الالكترونى
افتحها وفعل حسابك
مع تحيات اداره المنتدى
مع احترامى وتقديرى
وشكرا


منــــــتدى عالــــــــــم الفـــــــنون شـــــارك بالاراء وتمـــــتع بالمواضيــــــع نحـن الافضــــــــل
 
الرئيسيةالبوابةاليوميةس .و .جبحـثقائمة الاعضاءالمجموعاتالتسجيلدخول
بحـث
 
 

نتائج البحث
 
Rechercher بحث متقدم
بحـث
 
 

نتائج البحث
 
Rechercher بحث متقدم
سحابة الكلمات الدلالية
كونكر سلفر تهييس جديد سورس تهيس
سحابة الكلمات الدلالية
جديد تهييس كونكر تهيس سلفر سورس
المواضيع الأخيرة
» Server/5095/No Donate/Server/Free/All/Qust/all/Top/Level150/Rb2/+12
الخميس مارس 10, 2016 2:05 am من طرف elehadedy

» بعد زمن طويل اوي بعد فترة كبيرة جدا قنبلة في عالم كونكر اون لين سرفر صعب دروب 1 سبيس
الأربعاء مارس 09, 2016 7:56 pm من طرف زائر

» معانا سلفرين واحد صعب وواحد سلفر خش شوف ممزياتهم والله هيعجبك ولسه معملين حلاا
الإثنين مارس 07, 2016 2:07 pm من طرف زائر

» انا هقولك دروب 50 الف وي هديه كاس وي 25 مليون يعني حروب بي 100 مليون وي وحوش بي 150 مليون يعني تهييس بمعني تهييس
الإثنين مارس 07, 2016 10:15 am من طرف زائر

» اكل يخش سلفر جديد الحق مكانك وسبت نفسك في اسلفر معنا
الأحد مارس 06, 2016 11:52 am من طرف زائر

» سلفر لسه معمول دلوقتي لسه فاضي الحاق مكانك
الأحد مارس 06, 2016 11:48 am من طرف زائر

» لعشاق السرفرات الصعبه دروب 5 سبيس ممنوع التعريص لا يوجد عيوب بل سرفر
الخميس مارس 03, 2016 12:19 pm من طرف زائر

» انا هقول للكبار فقط يعني احسن لعبه ممنوع الاطفال سرفر دروب 1 الف سبيس وي هديه 10 مليون يعني خراب
الأربعاء مارس 02, 2016 9:24 pm من طرف زائر

» سرفر صعب ممتع وي كول جديد هنا انزل جرب وي لو معجبكش انا هجبلك غيرها
الأربعاء مارس 02, 2016 9:13 pm من طرف زائر

المواضيع الأخيرة
» Server/5095/No Donate/Server/Free/All/Qust/all/Top/Level150/Rb2/+12
الخميس مارس 10, 2016 2:05 am من طرف elehadedy

» بعد زمن طويل اوي بعد فترة كبيرة جدا قنبلة في عالم كونكر اون لين سرفر صعب دروب 1 سبيس
الأربعاء مارس 09, 2016 7:56 pm من طرف زائر

» معانا سلفرين واحد صعب وواحد سلفر خش شوف ممزياتهم والله هيعجبك ولسه معملين حلاا
الإثنين مارس 07, 2016 2:07 pm من طرف زائر

» انا هقولك دروب 50 الف وي هديه كاس وي 25 مليون يعني حروب بي 100 مليون وي وحوش بي 150 مليون يعني تهييس بمعني تهييس
الإثنين مارس 07, 2016 10:15 am من طرف زائر

» اكل يخش سلفر جديد الحق مكانك وسبت نفسك في اسلفر معنا
الأحد مارس 06, 2016 11:52 am من طرف زائر

» سلفر لسه معمول دلوقتي لسه فاضي الحاق مكانك
الأحد مارس 06, 2016 11:48 am من طرف زائر

» لعشاق السرفرات الصعبه دروب 5 سبيس ممنوع التعريص لا يوجد عيوب بل سرفر
الخميس مارس 03, 2016 12:19 pm من طرف زائر

» انا هقول للكبار فقط يعني احسن لعبه ممنوع الاطفال سرفر دروب 1 الف سبيس وي هديه 10 مليون يعني خراب
الأربعاء مارس 02, 2016 9:24 pm من طرف زائر

» سرفر صعب ممتع وي كول جديد هنا انزل جرب وي لو معجبكش انا هجبلك غيرها
الأربعاء مارس 02, 2016 9:13 pm من طرف زائر

ديسمبر 2016
الإثنينالثلاثاءالأربعاءالخميسالجمعةالسبتالأحد
   1234
567891011
12131415161718
19202122232425
262728293031 
اليوميةاليومية
ديسمبر 2016
الإثنينالثلاثاءالأربعاءالخميسالجمعةالسبتالأحد
   1234
567891011
12131415161718
19202122232425
262728293031 
اليوميةاليومية
التبادل الاعلاني

انشاء منتدى مجاني



التبادل الاعلاني

انشاء منتدى مجاني




شاطر | 
 

 شرح كامل لــ تعلم تكويد السورس من الالف الى الياء

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل 
كاتب الموضوعرسالة
ḾồhamểḓEl3rßawy
مؤسس الموقع
مؤسس الموقع


عدد المساهمات : 64
نقاط : -2147483296
السٌّمعَة : 3
تاريخ التسجيل : 27/09/2012
العمر : 18
الموقع : http://arab-dv.hooxs.com

مُساهمةموضوع: شرح كامل لــ تعلم تكويد السورس من الالف الى الياء   الثلاثاء أكتوبر 09, 2012 3:44 pm

[وحدهم المديرون لديهم صلاحيات معاينة هذه الصورة]
سلسله تعلم تكويد السورس من الالف الى الياء
منى انا بس محمد العرباوى Mohamed.FTW
مبدئيا
الموضوع ده كبير وهيحتاج صبر ومتابعه وتفاعل فياريت تشجعونى
والاقى تفاعل منكم لانى انا عامل الموضوع للافاده طبيعى لو ملقتش حد مهتم
مش هكمل لكن لو لقيت فى تفاعل هستمر واى سؤال ان شاء الله هجاوب عليه
[وحدهم المديرون لديهم صلاحيات معاينة هذه الصورة]
مشروع سيرفر من الصفر
اساس الفكره عشان اساعد الناس تفهم السورس بيتكود اذاى
ويقدروا يعملوا سورس خاص بيهم بدل ما كل واحد بيحط اسمه جمب اى سطر فى الكود
ويقول ده سورسى وتلاقى سورسات بالملايين وكل سورس باسم مختلف لكن كلهم واحد
[وحدهم المديرون لديهم صلاحيات معاينة هذه الصورة]
ملحوظه : انا هشرح عمل السيرفر على اخر كلاينت لكونكر اونلاين
لكن للاسف السورس مش هيكون فيه التشفير الجديد بتاع الباسوورد
لان ده محتاج برمجه عكسيه عشان تجيبها من الكلاينت وانا هشرح سى شارب بس
وكمان هيكون اساس الشرح على سورس امبلس
وهنبدأ مشروع جديد فى السى شارب وهندرس كل حاجه بالتفصيل
[وحدهم المديرون لديهم صلاحيات معاينة هذه الصورة]
سبب اختيارى لسورس امبلس
هو انه سورس اوبن يعنى لو حبيت انك تاخد منه حاجه فى المستقبل كوبى وبيست هتقدر
ده غير ان اصلا اغلب السورسات اللى نازله هيا سورس امبلس ومتعدله
معادا مجموعه قليله من السورسات مختلفه
[وحدهم المديرون لديهم صلاحيات معاينة هذه الصورة]
كفايه مقدمات ونبدا على بركه الله
كامل تعلم تكويد السورس الالف
اول حاجه هتتعمل هى السوكيت (سوكت الاتصال)
كامل تعلم تكويد السورس الالف
وكمعلومه عامه عن السوكت وايه وظيفته
السوكت ده وسيله اتصال بين اى تطبيقين او جهازيين
يعنى مثلا معايا جهاز A وجهاز B بعاد عن بعض ومحتاج ابعت بيانات من واحد للتانى
فهنا بتسخدم السوكت علشان نخليهم يتصلو ببعض
البيانات دى ممكن تكون صوت او صوره او نص الخ ...
[وحدهم المديرون لديهم صلاحيات معاينة هذه الصورة]
السوكيت نوعين
synchronous (سينكلونس)
وده بيبعت ويستقبل البيانات فى نفس الوقت
كامل تعلم تكويد السورس الالف
Asynchronous (إسينكلونس)
ده بيعت ويستقبل البيانات بس مش فى نفس الوقت
[وحدهم المديرون لديهم صلاحيات معاينة هذه الصورة]
انظمه الاتصال هما ثلات انواع
كامل تعلم تكويد السورس الالف
النظام الاول
duplex (دوبلكس)
ده بيرسل بيانات بس
ذى التليفزيون والراديو لو اتكلمت جمبه مش هيسمعك لكن هو شغال رغى رغى لما بوظ عقول البشر كامل تعلم تكويد السورس الالف
كامل تعلم تكويد السورس الالف
النظام الثانى
half-duplex (هاف دوبلكس)
ده بيستقبل بيانات ويستنه اشاره او امر علشان يبعت الرد
ذى الجهاز اللاسلكى الى مع الشرطه
لما بيتكلم واحد وبعد ما يخلص رسالته لازم يقول حول علشان الطرف التانى يفهم ان الرساله خلصت ويبدء يبعت هو رسالته
كامل تعلم تكويد السورس الالف
النظام الثالث
full-duplex (فول دوبلكس)
وده بيبعت ويستقبل بيانات فى نفس الوقت
ذى التليفون المحمول ممكن الاتنين يتكلمو فى نفس الوقت وهيسمعو برضه فى نفس الوقت
[وحدهم المديرون لديهم صلاحيات معاينة هذه الصورة]
علشان نبدء نعمل السوكت هنحتاج نعلن عن
net and netsocket
كامل تعلم تكويد السورس الالف
وهما هيكونو كده
using System.Net;
using System.Net.Sockets;
كامل تعلم تكويد السورس الالف
احنا ان شاء الله هنشتغل على سوكت
Asynchronous
وعموما سورس امبلس موجود فيه السوكتين

وعلشان نعمل السوكت هنحتاج
كامل تعلم تكويد السورس الالف
SocketWrapper
WinSocket
AsyncSocket
كامل تعلم تكويد السورس الالف
كامل تعلم تكويد السورس الالف
كامل تعلم تكويد السورس الالف
كامل تعلم تكويد السورس الالف
يتبع
[وحدهم المديرون لديهم صلاحيات معاينة هذه الصورة]
اهم حاجه تكون مسطب برنامج السى شارب والاب سيرفر والنافى كات

اولا هيتم عمل فولدر على بارتيشن ال سى
ونسميه BlackScorpion
بعد كده نفتح السى شارب ونعمل مشروع جديد
من قائمه File نختار New Project
هيفتح نافذه جديده فيها كذا اختيار هنختار منها ConsoleApplication
بعد كده نعمل سيف للمشروع فى الفلدر الى عملناه على بارتيشن ال سى
علشان تعمل save
من قائمه File نختار Save All
هتظهر نافذه فيها اسم المشروع والمكان الى هيتخزن فيه المشروع
نخلى المكان على بارتيشن ال سى فى الفولدر الى عملناه الى اسمه BlackScorpion
لحد كدا تمام وعملنا سيف للمشروع


بعد كده هنروح للنافذه الى على يمين البرنامج اسمها Solution Explorer
وهنضغط على اسم المشروع بتاعنا باليمين الى اسمه BlackScorpion


ونضيف فولدر جديد عن طريق
Add - New Folder
ونغير اسم الفلدر ونخليه Network
وبعد كده نضيف كلاس جديده جوه فولدر Network
عن طريق الضغط بالموس كليك يمين فوق فولدر Network
ونختار Add بعد كده Class
كده هيضيف كلاس جديده هنغير اسمها ونخليه
AsyncSocket.cs
ونضيف الكود ده جوة الكلاس
[وحدهم المديرون لديهم صلاحيات معاينة هذه الصورة]

كود PHP:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;
namespace BlackScorpion.Network
{
public class AsyncSocket
{
private int backlog;
private int clientbuffersize = 0xffff;
private WinSocket Connection = new WinSocket();
private bool enabled;
public bool GameServer = false;
public event Action OnClientConnect;
public event Action OnClientDisconnect;
public event Action OnClientReceive;
private ushort port;
public AsyncSocket(ushort port)
{
if (!this.enabled)
{
this.port = port;
this.Connection.Bind(new IPEndPoint(IPAddress.Any, this.port));
this.Connection.Listen(100);
this.Connection.BeginAccept(new AsyncCallback(this.AsyncConnect), null);
this.enabled = true;
}
}
private void AsyncConnect(IAsyncResult res)
{
AsyncSocketWrapper sender = null;
try
{
sender = new AsyncSocketWrapper();
sender.Create(this.Connection.EndAccept(res));
if (sender.Socket == null)
{
this.Connection.BeginAccept(new AsyncCallback(this.AsyncConnect), null);
return;
}
if (this.OnClientConnect != null)
{
this.OnClientConnect(sender);
}
sender.Socket.BeginReceive(sender.Buffer, 0, sender.Buffer.Length, SocketFlags.None, new AsyncCallback(this.AsyncReceive), sender);
this.Connection.BeginAccept(new AsyncCallback(this.AsyncConnect), null);
}
catch (SocketException e)
{
Console.WriteLine(e);
if (this.enabled)
{
this.Connection.BeginAccept(new AsyncCallback(this.AsyncConnect), null);
}
}
catch (ObjectDisposedException e)
{
Console.WriteLine(e);
}
}
private unsafe void AsyncReceive(IAsyncResult res)
{
bool was = false;
try
{
SocketError error;
AsyncSocketWrapper asyncState = (AsyncSocketWrapper)res.AsyncState;
int RecvSize = asyncState.Socket.EndReceive(res, out error);
if ((error == SocketError.Success) && (RecvSize > 0))
{
was = true;
byte[] buffer = new byte[RecvSize];
for (int i = 0; i < RecvSize; i++)
{
buffer[i] = asyncState.Buffer[i];
}
if (this.OnClientReceive != null)
{
this.OnClientReceive(buffer, asyncState);
}
asyncState.Socket.BeginReceive(asyncState.Buffer, 0, asyncState.Buffer.Length, SocketFlags.None, new AsyncCallback(this.AsyncReceive), asyncState);
}
else
{
this.InvokeDisconnect(asyncState);
}
}
catch (SocketException e)
{
Console.WriteLine(e);
}
catch (ObjectDisposedException e)
{
Console.WriteLine(e);
}
catch (Exception e)
{
Console.WriteLine(e);
if (was)
{
AsyncSocketWrapper asyncState = (AsyncSocketWrapper)res.AsyncState;
asyncState.Socket.BeginReceive(asyncState.Buffer, 0, asyncState.Buffer.Length, SocketFlags.None, new AsyncCallback(this.AsyncReceive), asyncState);
}
}
}
public void Disable()
{
if (this.enabled)
{
this.Connection.Disable();
this.enabled = false;
}
}
public void Enable()
{
if (!this.enabled)
{
this.Connection.Bind(new IPEndPoint(IPAddress.Any, this.port));
this.Connection.Listen(this.backlog);
this.Connection.BeginAccept(new AsyncCallback(this.AsyncConnect), null);
this.enabled = true;
}
}
private void enabledCheck(string Variable)
{
if (this.enabled)
{
throw new Exception("Cannot modify " + Variable + " while socket is enabled.");
}
}
public void InvokeDisconnect(AsyncSocketWrapper Client)
{
if (Client != null)
{
try
{
if (Client.Socket.Connected)
{
Client.Socket.Shutdown(SocketShutdown.Both);
Client.Socket.Close();
if (this.OnClientDisconnect != null)
{
this.OnClientDisconnect(Client);
}
Client.Connector = null;
Client = null;
}
else
{
if (this.OnClientDisconnect != null)
{
this.OnClientDisconnect(Client);
}
Client.Connector = null;
Client = null;
}
}
catch (ObjectDisposedException e)
{
Console.WriteLine(e);
}
}
}
public int Backlog
{
get
{
return this.backlog;
}
set
{
this.enabledCheck("Backlog");
this.backlog = value;
}
}
public int ClientBufferSize
{
get
{
return this.clientbuffersize;
}
set
{
this.enabledCheck("ClientBufferSize");
this.clientbuffersize = value;
}
}
public bool Enabled
{
get
{
return this.enabled;
}
}
public ushort Port
{
get
{
return this.port;
}
set
{
this.enabledCheck("Port");
this.port = value;
}
}
}
}


[وحدهم المديرون لديهم صلاحيات معاينة هذه الصورة]
بعد كده نضيف كلاس تانيه بنفس الطريقه جوه فولدر Newwork
ونسميها AsyncSocketWrapper.cs



ونضيف جواها الكود ده

كود:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
namespace BlackScorpion.Network
{
public class AsyncSocketWrapper
{
public int BufferSize
{
get;
set;
}
public byte[] Buffer
{
get;
set;
}
public WinSocket Socket
{
get;
set;
}
public object Connector
{
get;
set;
}
public AsyncSocketWrapper Create(Socket socket)
{
BufferSize = 8000;
Socket = new WinSocket(socket);
Buffer = new byte[BufferSize];
return this;
}
}
}




يتبع
[وحدهم المديرون لديهم صلاحيات معاينة هذه الصورة]
نيجى لاخر كلاس هنضيفها لفولدر Network
طبعا هنضيفها بنفس الاسلوب الى فات
ونسميها WinSocket.cs
ونضيف الكود ده جواها

كود:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;
namespace BlackScorpion.Network
{
public class WinSocket
{
private Socket Connection;
private bool disconnected = false;
public bool Disabled = false;
public WinSocket()
{
Connection = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
}
public WinSocket(Socket socket)
{
Connection = socket;
}
public void Bind(EndPoint point)
{
if (disconnected) return;
Connection.Bind(point);
}
public void Listen(int backlog)
{
if (disconnected) return;
Connection.Listen(backlog);
}
public void BeginAccept(AsyncCallback async, object state)
{
if (Disabled) return;
try
{
if (disconnected) return;
Connection.BeginAccept(async, state);
}
catch
{
Disabled = true;
}
}
public void BeginReceive(byte[] buffer, int offset, int size, SocketFlags flag, AsyncCallback callback, object state)
{
if (Disabled) return;
try
{
if (disconnected || !Connected) return;
Connection.BeginReceive(buffer, offset, size, flag, callback, state);
}
catch
{
Disabled = true;
}
}
public int EndReceive(IAsyncResult res, out SocketError err)
{
err = SocketError.Disconnecting;
if (Disabled) return 0;
try
{
if (!Usable) return 0;
return Connection.EndReceive(res, out err);
}
catch
{
Disabled = true;
}
return 0;
}
public Socket EndAccept(IAsyncResult async)
{
if (Disabled) return null;
try
{
if (disconnected) return null;
return Connection.EndAccept(async);
}
catch
{
Disabled = true;
}
return null;
}
public Socket Accept()
{
if (Disabled) return null;
try
{
if (disconnected) return null;
return Connection.Accept();
}
catch
{
Disabled = true;
}
return null;
}
public void Close()
{
}
public void Send(byte[] buffer)
{
if (Disabled) return;
try
{
if (disconnected) return;
Connection.Send(buffer);
}
catch
{
Disabled = true;
}
}
public void Disconnect(bool reuse)
{
if (Disabled) return;
try
{
if (!disconnected)
disconnected = true;
else
return;
Connection.Disconnect(reuse);
}
catch
{
Disabled = true;
}
}
public void Shutdown(SocketShutdown type)
{
Connection.Shutdown(type);
}
public bool Connected
{
get
{
if (Disabled) return false;
try
{
if (disconnected) return false;
return Connection.Connected;
}
catch
{
Disabled = true;
}
return false;
}
}
public int Receive(byte[] buffer)
{
if (disconnected) return 0;
return Connection.Receive(buffer);
}
public EndPoint RemoteEndPoint
{
get
{
if (Disabled) return new IPEndPoint(1, 1);
try
{
return Connection.RemoteEndPoint;
}
catch
{
Disabled = true;
}
return new IPEndPoint(1, 1);
}
}
private bool Usable
{
get
{
return !disconnected;
}
}
public void Disable()
{
try
{
Disabled = true;
Connection.Close();
}
catch
{
Disabled = true;
}
}
}
}


[وحدهم المديرون لديهم صلاحيات معاينة هذه الصورة]
هنبدء نضيف الجزء الخاص بالتشفير
وهنشرح فكره التشفير بتتم ازاى
وطبعا فايده التشفير او اهميته
الكلينت دايما بيبعت بكتات مشفره وعلشان السورس يفهمها بيفك تشفيرها
وبعد ما بيفك تشفيرها ويملاء البيانات المطلوبه بيشفرها تانى ويبعتها للكلينت
بكده السورس والكلينت يفهمو بعض
[وحدهم المديرون لديهم صلاحيات معاينة هذه الصورة]
ى التشفير عندنا
DHKeyExchange
Blowfish
AuthCryptography
[وحدهم المديرون لديهم صلاحيات معاينة هذه الصورة]
(الاوثورايزيشن)
ده تبع تشفير الباسورد واحنا كدا كدا هنعمله باى باس لكن هنسيبها لربما نعدل فيها لاحقا

بعد كدا عندنا DHKeyExchange (دى اتش كى اكستشانج)
اختصار ل
Diffie Hellman (DH) Key Exchange

ده عباره عن وسيله تشفير بنعمل فيها تبادل لمفتاح سرى على اتصال عام غير مؤمن
وده بيستخدم لفك وتشفير البيانات باستخدام وسيله تشفير زى Blowfish
علشان نفهم ايه الى بيحصل فى الجزء الخاص بتبادل المفاتيح

عايزين نتخيل مع بعض اننا معانا شبكه فيها اجهزه ..منهم اتنين عايزين يعملوا اتصال سرى
هما الاتنين هيتفقوا على بيانات عامه هتترسل فى الشبكه وبالتالى كل اللى فى الشبكه هيقدروا يشوفوها
وده المقصوى باتصال غير امن يعنى متاح للجميع
لكن الاتنين هيعملوا حسبه معينه وهيجيبوا مفتاح مش هيتم ارساله على الشبكه وهو اللى هيستخدموه لفك التشفير
وده مش هيبقى عام طبعا

مثال : اتنين معاهم شنطه
الاول معاه مفتاه ازرق ... والتانى معاه مفتاح احمر وهما الاتنين عايزين يتفقوا انهم هيبعتوا
مفتاح اخضر لبعض
هيجى الاول هيحط المفتاح الاخضر فى الشنطه وهيقفلها بمفتاحه هو الاحمر ويبعتها للتانى
التانى مش معاه المفتاح الاحمر لكن عايز المفتاح الاخضر اللى فى الشطنه
فهيقفل الشنطه مره كمان بالمفتاح الازرق ويبعتها للاول
يروح الاول برضه مش معاه المفتاح الازرق لكن معاه الاحمر بتاعه هو ..فهيفتح بالمفتاح الاحمر بتاعه ويبعت الشنطه تانى
يروح التانى كده يفتح الشنطه بالمفتاح الازرق بتاعه وكده ياخد المفتاح الاخضر اللى هو اصلا الهدف من البدايه
وكده يبقى الاتنين معاهم المفتاح الاخضر ويبدؤا يكلموا بعض بشكل سرى امن

نشوف الموضوع ده بالارقام وشغلوا مخكم معايا
هنتخيل ان احنا معانا جهازين وهنسميهم
PC1 --------PC2
الاتنين اتفقوا على استخدام مفتاح اساسى هنسميه P هيكون اكبر من 2
ومفتاح عام هنسميه G وهيكون اقل من P
الاتنين دول هيكونوا عام يعنى اى حد ممكن يعرفهم
وبعدين الاتنين هيعملوا رقم عشوائى خاص هنسميه X
وده محدش هيعرفه الا صاحبه بس يعنى حتى الجهاز التانى مش هيعرفه
ودى برضه لازم تكون اقل من P
تعالى نقول ان P و G هيكونوا كالتالى
P = 41
G = 35
وهنقول ان الجهاز الاول عمل X= 9 و الجهاز التانى عمل X= 24
يبقى المعلومات اللى معانا هيه
PC1 P= 41 , G= 35 X=9
PC2 P=41 , G=35 , X=24
الخطوه اللى بعد كده اننا هنعمل G مرفوعه فى الاس بتاع X
وهنقسم الناتج على P
ركز هنا ... مش هناخد ناتج القسمه لكن هناخد خااااااااارج القسمه
مثلا : 9 / 2 =4 والباقى واحد يبقى خارج القسمه هو واحد
وبعد كده الجهازين هيبعتوا الناتج لبعض
الجهاز التانى بقى هياخد الناتج ده ويعمل فيه نفس الحكايه يرفعه للاس بتاع X عنده
ويطلع خارج القسمه على P
والناتج هنا هو المفتاح السرى اللى هيستخدموه وعلى اساسه هيتم التشفير

نشوفها بالارقام فى اربع خطوات
احنا قلنا انهم اتفقوا على P و G وكل واحد عمل X عشوائى وهما
PC1 P= 41 , G= 35 , X=9
PC2 P=41 , G=35 , X=24
الخطوه الاولى

الجهاز الاول هيعمل الحسبه دى
35^9 %41= 22
يعنى 35 اس 9 وناخد خارج القسمه على41
الناتج وهو 22 هيروح للجهاز التانى
الخطوه التانيه

الجهاز التانى هياخد الرقم ده ويعمل نفس الحسبه
22^24%41=18
22 اس 24 مقسوم على 41
وهنا رفعه للاس بتاع X بتاعه هو
والناتج هنا 18 مش هيروح للجهاز الاول وهو ده المفتاح السرى يعنى الجهاز التانى وصل للهدف
الخطوه التالته

الجهاز التانى برضه هيعمل حسبته زى الجهاز الاول كالتالى
35^24%41=16
35 اس 24 مقسوم على 41 خارج القسمه هو 16
هيبعت الرقم ده للجهاز الاول
الخطوه الرابعه والاخيره

ان الجهاز الاول هيعمل الحسبه بتاعته برضه بالرقم اللى جاله وهو 16
16^9%41=18
هيقول 16 اس 9 مقسوم على 41 خارج القسمه هو برضه 18
وهو نفس الرقم السرى وده كمان وصل لهدفه وكده معاهم نفس المفتاح

ملحوظه
لو حبيتوا تعملوا الحسبه دى على الاله الحاسبه هتستخدموا خارج القسمه
MOD
بدل من القسمه العاديه
ده باختصار هو معنى تبادل المفاتيح

الارقام المستخدمه كانت للتبسيط طبعا لكن المفاتيح الحقيقيه ممكن توصل ل 128 بايت وده معناه انك شبه مستحيل انك تقدر تخمنهم يعنى زى ماهو موجود فى كونكر مثلا دول هما البى والجى
P = "E7A69EBDF105F2A6BBDEAD7E798F76A209AD73FB46643 1E2E 7352ED262F8C558F10BEFEA977DE9E21DCEE9B04D245F300EC CBBA03E72630556D011023F9E857F"
G = "05"
[وحدهم المديرون لديهم صلاحيات معاينة هذه الصورة]
ندخل على اللى بعده
Blowfish

دى بقى صعبه شويه ومعقده
وانا مش فاهمها قوى لكن هشرح على قدر معرفتى بيها
ولو فى حد عنده اى معلومات اضافيه عنها اتمنا يفيدنا بيها

دى بتشفر بالكتله او بالبلوكات من البافر او الباكيت
طول الكتله بتاعتها 64 بايت وبيكون ليها مفتاح طوله متغير ما بين 32 الى 448 بت
يعنى
هو انك بتستخدم المفتاح عشان تعمل تحريك للبايتات فى المصفوفه او البافر وبتقارن قيمه كل بايت مع المفتاح وبتتحرك على اساسه ومع كل بايت فى المفتاح لما هتتحرك هتشفر الجزء اللى اصلا تم تشفيره قبل كده
عموما انا مش عايز اديلكم معلومات غلط فى الجزئيه دى
لكن اختصارا هقولكم الفكره الاساسيه خالص للتشفير
احنا عندنا الحروف ترتيبهم كده
a b c d e f g h i j k l m n o p q r s t u v w x y z
لو عندنا مثلا كلمه
word
وانا جيت شفرتها باسلوب التحريك لليمين مره وحرف واحد
فهناخد الحرف الاول بس وهنقدمه خطوه بدل ما هو W هيكون X
هيبقى الناتج بعد التشفير هو
xord
طبعا ممكن اعمل كده على الكلمه كلها فاحرك كل حرف خطوه واجيب الحرف اللى بعده فتبقى الناتج هو
xpse
وممكن اعملها باسلوب تانى وهو انى اشفرها حرف حرف لكن كل مره هشفر الحرف اللى كان اتشفر قبل كده
تعالوا نعملها اربع مرات بس ونشوف المثال
1- word >>>> xord
2- xord >>>> ypse
3-ypse >>>> zqtf
4-zrtf >>>> asug
فاحنا لما شفرناها خلينا الحرف اللى كان متشفر قبل كده يتشفر تانى وعلشان نفكها هنرجع نفس الخطوات
ونفس عدد المرات
اتمنى يكون المثال ده وضح الفكره العامه



يتبع

[وحدهم المديرون لديهم صلاحيات معاينة هذه الصورة]
هنبدء نضيف الاكواد الخاصه بالتشفير
اولا هنضيف فولدر جديد بالضغط على اسم المشروع كليك يمين بالماوس
ونضيف فولدر جديد ونسميه CryptoGraphy
وهنضيف جواه 3 كلاسات
يلا نمشيهم واحده واحده
الكلاس الاولى هنسميها AuthCryptography.cs
وهنضيف جواها الكود ده


كود PHP:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BlackScorpion.CryptoGraphy
{
public class AuthCryptography
{
class CryptCounter
{
public CryptCounter()
{
}
public CryptCounter(ushort with)
{
m_Counter = with;
}
UInt16 m_Counter = 0;
public byte Key2
{
get { return (byte)(m_Counter >> Cool; }
}
public byte Key1
{
get { return (byte)(m_Counter & 0xFF); }
}
public void Increment()
{
m_Counter++;
}
}
private CryptCounter _decryptCounter;
private CryptCounter _encryptCounter;
private static byte[] _cryptKey1;
private static byte[] _cryptKey2;
private static byte[] _cryptKey3;
private static byte[] _cryptKey4;
private static bool Decrypt2 = false;
public static void PrepareAuthCryptography()
{
if (_cryptKey1 != null)
{
if (_cryptKey1.Length != 0)
return;
}
_cryptKey1 = new byte[0x100];
_cryptKey2 = new byte[0x100];
byte i_key1 = 0x9D;
byte i_key2 = 0x62;
for (int i = 0; i < 0x100; i++)
{
_cryptKey1[i] = i_key1;
_cryptKey2[i] = i_key2;
i_key1 = (byte)((0x0F + (byte)(i_key1 * 0xFA)) * i_key1 + 0x13);
i_key2 = (byte)((0x79 - (byte)(i_key2 * 0x5C)) * i_key2 + 0x6D);
}
}
public AuthCryptography()
{
_encryptCounter = new CryptCounter();
_decryptCounter = new CryptCounter();
}
public void Encrypt(byte[] buffer)
{
for (int i = 0; i < buffer.Length; i++)
{
buffer[i] ^= (byte)0xAB;
buffer[i] = (byte)(buffer[i] >> 4 | buffer[i] << 4);
buffer[i] ^= (byte)(_cryptKey1[_encryptCounter.Key1] ^ _cryptKey2[_encryptCounter.Key2]);
_encryptCounter.Increment();
}
}
public void Decrypt(byte[] buffer)
{
if (!Decrypt2)
{
for (int i = 0; i < buffer.Length; i++)
{
buffer[i] ^= (byte)0xAB;
buffer[i] = (byte)(buffer[i] >> 4 | buffer[i] << 4);
buffer[i] ^= (byte)(_cryptKey2[_decryptCounter.Key2] ^ _cryptKey1[_decryptCounter.Key1]);
_decryptCounter.Increment();
}
}
else
{
for (int i = 0; i < buffer.Length; i++)
{
buffer[i] ^= (byte)0xAB;
buffer[i] = (byte)(buffer[i] >> 4 | buffer[i] << 4);
buffer[i] ^= (byte)(_cryptKey4[_decryptCounter.Key2] ^ _cryptKey3[_decryptCounter.Key1]);
_decryptCounter.Increment();
}
}
}
public static void GenerateKeys(UInt32 CryptoKey, UInt32 AccountID)
{
UInt32 tmpkey1 = 0, tmpkey2 = 0;
tmpkey1 = ((CryptoKey + AccountID) ^ (0x4321)) ^ CryptoKey;
tmpkey2 = tmpkey1 * tmpkey1;
_cryptKey3 = new byte[256];
_cryptKey4 = new byte[256];
for (int i = 0; i < 256; i++)
{
int right = ((3 - (i % 4)) * Cool;
int left = ((i % 4)) * 8 + right;
_cryptKey3[i] = (byte)(_cryptKey1[i] ^ tmpkey1 << right >> left);
_cryptKey4[i] = (byte)(_cryptKey2[i] ^ tmpkey2 << right >> left);
}
Decrypt2 = true;
}
public static void GenerateKeys2(byte[] InKey1, byte[] InKey2)
{
byte[] addKey1 = new byte[4];
byte[] addKey2 = new byte[4];
byte[] addResult = new byte[4];
byte[] tempKey = new byte[4];
long LMULer;
_cryptKey3 = new byte[256];
_cryptKey4 = new byte[256];
for (int x = 0; x < 4; x++)
{
addKey1[x] = InKey1[3 - x];
addKey2[x] = InKey2[3 - x];
}
uint Adder1;
uint Adder2;
uint Adder3;
Adder1 = (uint)((addKey1[3] << 24) | (addKey1[2] << 16) | (addKey1[1] << Cool | (addKey1[0]));
Adder2 = (uint)((addKey2[3] << 24) | (addKey2[2] << 16) | (addKey2[1] << Cool | (addKey2[0]));
Adder3 = Adder1 + Adder2;
addResult[0] = (byte)(Adder3 & 0xff);
addResult[1] = (byte)((Adder3 >> Cool & 0xff);
addResult[2] = (byte)((Adder3 >> 16) & 0xff);
addResult[3] = (byte)((Adder3 >> 24) & 0xff);
for (int b = 3; b >= 0; b--)
{
tempKey[3 - b] = addResult[b];
}
tempKey[2] = (byte)(tempKey[2] ^ (byte)0x43);
tempKey[3] = (byte)(tempKey[3] ^ (byte)0x21);
for (int b = 0; b < 4; b++)
{
tempKey[b] = (byte)(tempKey[b] ^ InKey1[b]);
}
for (int b = 0; b < 256; b++)
{
_cryptKey3[b] = (byte)(tempKey[3 - (b % 4)] ^ _cryptKey1[b]);
}
 
for (int x = 0; x < 4; x++)
{
addResult[x] = tempKey[3 - x];
}
Adder3 = (uint)((addResult[3] << 24) | (addResult[2] << 16) | (addResult[1] << Cool | (addResult[0]));
LMULer = Adder3 * Adder3;
LMULer = LMULer << 32;
LMULer = LMULer >> 32;
Adder3 = Convert.ToUInt32(LMULer & 0xffffffff);
addResult[0] = (byte)(Adder3 & 0xff);
addResult[1] = (byte)((Adder3 >> Cool & 0xff);
addResult[2] = (byte)((Adder3 >> 16) & 0xff);
addResult[3] = (byte)((Adder3 >> 24) & 0xff);
for (int b = 3; b >= 0; b--)
{
tempKey[3 - b] = addResult[b];
}
for (int b = 0; b < 256; b++)
{
_cryptKey4[b] = Convert.ToByte(tempKey[3 - (b % 4)] ^ _cryptKey2[b]);
}
Decrypt2 = true;
}
}
}
[وحدهم المديرون لديهم صلاحيات معاينة هذه الصورة]
الكلاس التانيه وهنسميها Blowfish.cs
وهنضيف الكود ده جواها


كود PHP:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace BlackScorpion.CryptoGraphy
{
public class GameCryptography
{
Blowfish _blowfish;
public GameCryptography(byte[] key)
{
_blowfish = new Blowfish(BlowfishAlgorithm.CFB64);
_blowfish.SetKey(key);
}
public void Decrypt(byte[] packet)
{
byte[] buffer = _blowfish.Decrypt(packet);
System.Buffer.BlockCopy(buffer, 0, packet, 0, buffer.Length);
}
public void Encrypt(byte[] packet)
{
byte[] buffer = _blowfish.Encrypt(packet);
System.Buffer.BlockCopy(buffer, 0, packet, 0, buffer.Length);
}
public Blowfish Blowfish
{
get { return _blowfish; }
}
public void SetKey(byte[] k)
{
_blowfish.SetKey(k);
}
public void SetIvs(byte[] i1, byte[] i2)
{
_blowfish.EncryptIV = i1;
_blowfish.DecryptIV = i2;
}
}
public enum BlowfishAlgorithm
{
ECB,
CBC,
CFB64,
OFB64,
};
public class Blowfish : IDisposable
{
[DllImport("libeay32.dll", CallingConvention = CallingConvention.Cdecl)]
public extern static void CAST_set_key(IntPtr _key, int len, byte[] data);
[DllImport("libeay32.dll", CallingConvention = CallingConvention.Cdecl)]
public extern static void BF_ecb_encrypt(byte[] in_, byte[] out_, IntPtr schedule, int enc);
[DllImport("libeay32.dll", CallingConvention = CallingConvention.Cdecl)]
public extern static void BF_cbc_encrypt(byte[] in_, byte[] out_, int length, IntPtr schedule, byte[] ivec, int enc);
[DllImport("libeay32.dll", CallingConvention = CallingConvention.Cdecl)]
public extern static void CAST_cfb64_encrypt(byte[] in_, byte[] out_, int length, IntPtr schedule, byte[] ivec, ref int num, int enc);
[DllImport("libeay32.dll", CallingConvention = CallingConvention.Cdecl)]
public extern static void BF_ofb64_encrypt(byte[] in_, byte[] out_, int length, IntPtr schedule, byte[] ivec, out int num);
[StructLayout(LayoutKind.Sequential)]
struct bf_key_st
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 18)]
public UInt32[] P;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 1024)]
public UInt32[] S;
}
private BlowfishAlgorithm _algorithm;
private IntPtr _key;
private byte[] _encryptIv;
private byte[] _decryptIv;
private int _encryptNum;
private int _decryptNum;
public Blowfish(BlowfishAlgorithm algorithm)
{
_algorithm = algorithm;
_encryptIv = new byte[8] { 0, 0, 0, 0, 0, 0, 0, 0 };
_decryptIv = new byte[8] { 0, 0, 0, 0, 0, 0, 0, 0 };
bf_key_st key = new bf_key_st();
key.P = new UInt32[16 + 2];
key.S = new UInt32[4 * 256];
_key = Marshal.AllocHGlobal(key.P.Length * sizeof(UInt32) + key.S.Length * sizeof(UInt32));
Marshal.StructureToPtr(key, _key, false);
_encryptNum = 0;
_decryptNum = 0;
}
public void Dispose()
{
Marshal.FreeHGlobal(_key);
}
public void SetKey(byte[] data)
{
_encryptNum = 0;
_decryptNum = 0;
CAST_set_key(_key, data.Length, data);
}
public byte[] Encrypt(byte[] buffer)
{
byte[] ret = new byte[buffer.Length];
switch (_algorithm)
{
case BlowfishAlgorithm.ECB:
BF_ecb_encrypt(buffer, ret, _key, 1);
break;
case BlowfishAlgorithm.CBC:
BF_cbc_encrypt(buffer, ret, buffer.Length, _key, _encryptIv, 1);
break;
case BlowfishAlgorithm.CFB64:
CAST_cfb64_encrypt(buffer, ret, buffer.Length, _key, _encryptIv, ref _encryptNum, 1);
break;
case BlowfishAlgorithm.OFB64:
BF_ofb64_encrypt(buffer, ret, buffer.Length, _key, _encryptIv, out _encryptNum);
break;
}
return ret;
}
public byte[] Decrypt(byte[] buffer)
{
byte[] ret = new byte[buffer.Length];
switch (_algorithm)
{
case BlowfishAlgorithm.ECB:
BF_ecb_encrypt(buffer, ret, _key, 0);
break;
case BlowfishAlgorithm.CBC:
BF_cbc_encrypt(buffer, ret, buffer.Length, _key, _decryptIv, 0);
break;
case BlowfishAlgorithm.CFB64:
CAST_cfb64_encrypt(buffer, ret, buffer.Length, _key, _decryptIv, ref _decryptNum, 0);
break;
case BlowfishAlgorithm.OFB64:
BF_ofb64_encrypt(buffer, ret, buffer.Length, _key, _decryptIv, out _decryptNum);
break;
}
return ret;
}
public byte[] EncryptIV
{
get { return _encryptIv; }
set { System.Buffer.BlockCopy(value, 0, _encryptIv, 0, Cool; }
}
public byte[] DecryptIV
{
get { return _decryptIv; }
set { System.Buffer.BlockCopy(value, 0, _decryptIv, 0, Cool; }
}
}
}
[وحدهم المديرون لديهم صلاحيات معاينة هذه الصورة]
الكلاس الاخيره الخاصه بالتشفير
وبرضه هنضيفها فى فولدر CryptoGraphy
وهنسميها DHKeyExchange.cs
وهنضيف جواها الكود ده
من الافضل تحميل الكود من هنا

كود PHP:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Security.Cryptography;
namespace BlackScorpion.CryptoGraphy
{
public static class DHKeyExchange
{
public static Random Random = new Random();
public class ServerKeyExchange
{
OpenSSL.DH _keyExchange;
byte[] _serverIv;
byte[] _clientIv;
public byte[] CreateServerKeyPacket()
{
_clientIv = new byte[8];
_serverIv = new byte[8];
string P = "E7A69EBDF105F2A6BBDEAD7E798F76A209AD73FB466431E2E 7352ED262F8C558F10BEFEA977DE9E21DCEE9B04D245F300EC CBBA03E72630556D011023F9E857F";
string G = "05";
_keyExchange = new OpenSSL.DH(OpenSSL.BigNumber.FromHexString(P), OpenSSL.BigNumber.FromHexString(G));
_keyExchange.GenerateKeys();
return GeneratePacket(_serverIv, _clientIv, P, G, _keyExchange.PublicKey.ToHexString());
}
public GameCryptography HandleClientKeyPacket(string PublicKey, GameCryptography cryptographer)
{
byte[] key = _keyExchange.ComputeKey(OpenSSL.BigNumber.FromHexString(PublicKey));
string md = KeyMD5(MD5.Create().ComputeHash(key));
key = Encoding.Default.GetBytes(md);
cryptographer.SetKey(key);
cryptographer.SetIvs(_clientIv, _serverIv);
return cryptographer;
}
 
public static string KeyMD5(byte[] object_1)
{
char[] chArray = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
int num = 0;
int num2 = 0;
int length = object_1.Length;
char[] chArray2 = new char[length * 2];
while (num < length)
{
byte num4 = (byte)object_1[num++];
chArray2[num2++] = chArray[num4 / 0x10];
chArray2[num2++] = chArray[num4 % 0x10];
}
return new string(chArray2, 0, chArray2.Length);
}
public byte[] GeneratePacket(byte[] ServerIV1, byte[] ServerIV2, string P, string G, string ServerPublicKey)
{
int PAD_LEN = 11;
int _junk_len = 12;
string tqs = "TQServer";
MemoryStream ms = new MemoryStream();
byte[] pad = new byte[PAD_LEN];
Random.NextBytes(pad);
byte[] junk = new byte[_junk_len];
Random.NextBytes(junk);
int size = 47 + P.Length + G.Length + ServerPublicKey.Length + 12 + 8 + 8;
BinaryWriter bw = new BinaryWriter(ms);
bw.Write(pad);
bw.Write(size - PAD_LEN);
bw.Write((UInt32)_junk_len);
bw.Write(junk);
bw.Write((UInt32)ServerIV2.Length);
bw.Write(ServerIV2);
bw.Write((UInt32)ServerIV1.Length);
bw.Write(ServerIV1);
bw.Write((UInt32)P.ToCharArray().Length);
foreach (char fP in P.ToCharArray())
{
bw.BaseStream.WriteByte((byte)fP);
}
bw.Write((UInt32)G.ToCharArray().Length);
foreach (char fG in G.ToCharArray())
{
bw.BaseStream.WriteByte((byte)fG);
}
bw.Write((UInt32)ServerPublicKey.ToCharArray().Length);
foreach (char SPK in ServerPublicKey.ToCharArray())
{
bw.BaseStream.WriteByte((byte)SPK);
}
foreach (char tq in tqs.ToCharArray())
{
bw.BaseStream.WriteByte((byte)tq);
}
byte[] Packet = new byte[ms.Length];
Packet = ms.ToArray();
ms.Close();
return Packet;
}
}
}
}
[وحدهم المديرون لديهم صلاحيات معاينة هذه الصورة]
[وحدهم المديرون لديهم صلاحيات معاينة هذه الصورة]
[وحدهم المديرون لديهم صلاحيات معاينة هذه الصورة] drunken
الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو http://arab-dv.hooxs.com
ḾồhamểḓEl3rßawy
مؤسس الموقع
مؤسس الموقع


عدد المساهمات : 64
نقاط : -2147483296
السٌّمعَة : 3
تاريخ التسجيل : 27/09/2012
العمر : 18
الموقع : http://arab-dv.hooxs.com

مُساهمةموضوع: رد: شرح كامل لــ تعلم تكويد السورس من الالف الى الياء   الثلاثاء أكتوبر 09, 2012 3:57 pm

علشان تعرفو انو مش منقوووووووووول Razz
الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو http://arab-dv.hooxs.com
elbacary



عدد المساهمات : 1
نقاط : 1
السٌّمعَة : 0
تاريخ التسجيل : 21/10/2013

مُساهمةموضوع: رد: شرح كامل لــ تعلم تكويد السورس من الالف الى الياء   الإثنين أكتوبر 21, 2013 7:48 pm

Very Happy  ممتاز جداااااااااااااااااااااااا
الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو
 
شرح كامل لــ تعلم تكويد السورس من الالف الى الياء
استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1

صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
منتدى عالم الفنون :: قسم كونكر تهييس :: قسمConquer Online Private Servers-
انتقل الى: