السلام عليكم جميعا
احاول عمل برنامج للتشفير ولكنى مازلت فى البدايه
وبدأت بخوارزم الـ RSA
بالرغم من وجود name space خاص بالـ Security ويحتوى على implementation لهذا الخوارزم ولكن واجهتنى مشكله فى التعامل معه حيث ان Microsoft اخفت الكثير من الـ Functions فلم استطع فهم الـ implementation الجاهز وشكرا لـ Microsoft
وصححونى لو كنت غلطان
ففكرت فى عمل الـ Implementation من البدايه
فكره الخوارزم هى كالتالى :
1. Generate two large random primes, p and q, of approximately equal size such that their product n = pq and p =! q . 2. Compute n = pq and φ(n)= (p-1)(q-1). 3. Choose an integer e, 1 < e < φ(n), such that gcd(e, φ(n)) = 1. 4. Compute the secret exponent d, 1 < d < φ(n), such that de ≡ 1 (mod φ(n)). 5. The public key is (n, e) and the private key is (n, d). The values of p, q, and φ(n) should also be kept secret. • n is known as the modulus. • e is known as the public exponent or encryption exponent. • d is known as the secret exponent or decryption exponent.
وهذا ما وصلت اليه حتى الان
الخطوه رقم 1 هى اختيار عددين اوليين بشكل عشوائى :
Start:
Random rnd = new Random();
int x = 17;//rnd.Next(3, 100);
int y = 11;//rnd.Next(3, 100);
#endregion
/*********************************************************/
// Validating if the numbers are primes
for (int i = 2; i < x; i++)
{
if (x % i == 0)
{
goto Start;
}
}
for (int j = 2; j < y; j++)
{
if (y % j == 0)
{
goto Start;
}
}
// Validating that P!=Q and display the numbers
if (x != y)
{
Console.WriteLine("P = " + x);
Console.WriteLine("Q = " + y);
}
else
goto Start;الخطوه رقم 2 هى مجرد حسابات بسيطه .
فى الخطوه رقم 3 جربت اختيار الـ e بحيث تكون Prime لفشلى فى عمل كود للـ GCD
// Calculate e : 1 < e < phi(n)
Start2:
Random rnd2 = new Random();
int e = 7;// rnd2.Next(n2);
for (int i = 2; i < e; i++)
{
if (e % i == 0 )
{
goto Start2;
}
if (e == x && e == y)
{
goto Start2;
}
}
Console.WriteLine("-------------------------");
Console.WriteLine("e = "+e);والخطوه رقم 4 :
//Compute d : de = 1 (mod phi(n))
// d = (K*phi(n)+1) / e
int d;
for (int k = 1;;k++ )
{
int l = (k * (n2 + 1))%e;
if (l == 0)
{
d = (k * (n2 + 1)) / e;
break;
}
else
k++;
}
Console.WriteLine("d = " + d);
Console.WriteLine("");
Console.WriteLine("The Public key is :(" + e + "," + n + ")");
Console.WriteLine("The Private key is :(" + d + "," + n + ")");
Console.WriteLine("-------------------------");بقى الان عمل الـ Encryption & Decryption
وهنا المشكله الكبيره
تم اتخاذ قيم لـ P = 17,Q = 11,e = 7
لمعرفه مكان المشكله ووجدت فى الـ Encryption
//Encryption & Decryption
Console.WriteLine("Enter messege to Encrypt");
string s1 = Console.ReadLine();
int m =int.Parse(s1);
int c = m ^ e% n;
Console.WriteLine("The Cipher is : " + c);
Console.WriteLine("To decrypt press Enter");
Console.ReadLine();
m = (c ^ d)% n;
Console.WriteLine("The Plain messege is : "+m);باستخدام القيم الـ P = 17,Q = 11,e = 7
ستكون النتيجه n = 187,phi n = 160 , d= 23
عند تشفير رقم 88 مثلا وهذا مثال موجود فى كتاب عندى
سيكون ناتج التشفير 11
ولكن مش دى النتيجه اللى بتظهر فى الكود ده :wacko:
يارييت تساعدوونى يا شباب و ادعولى اقدر اكمل المشروع ده :^)