مساعده rsa

[CENTER]السلام عليكم

[RIGHT]محتاج كود خاص بال rsa … بحثت كتير وقرأت اكثر ولكنى لا استطتيع التنفيذ :frowning:



disp('Please enter two large numbers');
p=input('Enter the first number');
q=input('Enter the second number');
for i=2:p-1
    if mod(p,i)==0
        p2=('not prime');
        break;
    else 
        p2=('prime');
    end 
end
for i=2:q-1
    if mod(q,i)==0
        q2=('not prime');
        break;
    else 
        q2=('prime');
    end 
end
s1=strcmp(p2,'prime');
s2=strcmp(q2,'prime');
if s1==1&s2==1
    n=p*q;
    fn=(p-1)*(q-1);
    for i=4:fn-1
        if gcd(i,fn)==1
            e=i;
            break
        end
    end
    for j=0:fn-1
        r=j*e;
        if mod(r,fn)==1
            d=j;
            break
        end
    end
    m=88;
    c=mod(m.^e,n);
    c
    m=mod(c^d,n);
    m
else
 disp(' the first number of second number that you enter are not prime');
end  

هذا الكود قام به احد المشرفيين بهذا المنتدى
[/right]
[/center]

للعلم … لقد انتهت من التشفير ب des , t-des, blowfish ولكن ال rsa اشعر بانه اكثر تعقيدا :frowning:

ما المشكلة ؟

يوجد قلق + قله تركيز + قله خبره بالماتلاب ادت بان يكون هذا المطلوب

[SIZE=3]

  1. Choose two large prime numbers P and Q

  2. Calculate N= P*Q

  3. Select the public key (the encryption key) E such that it is not a factor of (P-1) and (Q-1)

  4. Select the private key (the decryption key) D such that the following equation is true:
    (DE) mod (P-1)(Q-1) =1

  5. For encryption, calculate the cipher text CT from the plain text PT as follows:
    CT= PTpowerE mod N

  6. Send CT as the cipher text to the receive

  7. for decryption, calculate the plain text PT from the cipher text CT as follows:

PT=CTpowerD mod N

ياخذ الكود الذى قد قمت بوضعه لك برساله خاصه

وهذا هو شرح ما اريد القيام به

[/size]

اخى العزيز يرجى تحديد ما هى المشكلة التى تواجهها فى الماتلاب نظرا لانه ليس لدى خبرة فى مجال التشفير

اعتذر اليك لسوء ادارتى للموضوع لكن السبب الاساسى اننى لم افهم ال rsa جيدا

فلو عند حضرتك وقت ولو بسيط جدا ارجو قراءه
http://members.peak.org/~jeremy/rsa.html
وهو فيه تلخيص لكل ما اردت القيام به … فهل ممكن مساعدتك ف عمل برنامج يقوم بمثل هذه الخطوات ؟!!! ولكن على ارقام اوليه كبيره !!؟

[I]
اريد برنامج
1- نقوم له بادخال رقمين بشرط ان يكونوا ارقام اوليه غير متشابهه(p,q)
2- وان يتم ضربهم فى بعضهم للحصول على متغير n
3- كود PHP:

phi_n=(p-1)*(q-1);

4- [/i] اختر عدد صحيح e بشرط أن يكون، و e و ليس لهم اي عامل مشترك غير ال 1 (coprime)[I] ووظيفته مشروحه بشكل رائع على هذا الرابط http://members.peak.org/~jeremy/rsa.html#wiener
5- الحصول على قيمه المتغير d
حيث ed mod (p-1)(q-1) = 1

6- ايجاد قيم المتغيرين c,m
حيث
c = me mod n
m = cd mod n[/i]

بالنسبة للبرنامج الذى تريده اعتقد ان البرنامج الذى وضعته فى اول الموضوع يؤدي الوظيفة التى تريدها
اذا لم يمكن هذا يمكنك استعماله والتعديل عليه

جميع ما ذكرته موجود فى البرنامج السابق
بالاضافة الى انه يتأكد ايضا ان المستخدم ادخل رقمين اولين واذا كانوا غير ذلك يعطيه رسالة خطأ

قيمه ال d و e مختلفه عن هذا المثال

p=61 and q=53
2) حساب n= pq n=61*53 = 3233
3) حساب الTotient: φ(n) = (p-1)(q-1 φ(n)== (61-1)(53-1) == 3120
4) اختيار e > 1 الذي ليس له اي عامل مشترك غير ال 1 مع ال 3120 e=17
5) حساب d على أن تكون (mod φ(n)) 1 ≡ de d = 2753 17 * 2753 == 46801 == 1 + 15 * 3120
المفتاح العام هو (n= 3233, e= 17). ومعادلة التشفير هي: c== m^e % n == m^17 % 3233
المفتاح الخاص هو (n=3233, d=2753)، ومعادلة فك التشفير هي: m=c^d % n = c ^2753 % 3233
على سبيل المثال، لتشفير m = 123، نحسب c == 123^17 mod 3233 == 855
أو لفك تشفير c = 855، نحسب m=855^2753 mod 3233 = 123

اعتقد هذا الاختلاف بناء على اختيار العامل المشترك e
فانت اختارتها تساوى 17 اما فى المثال السابق كانت تساوى 7
وفى المثال من خلال الاكواد الاتية

    for i=4:fn-1
        if gcd(i,fn)==1
            e=i;
            break
        end
    end

يقوم بانهاء اللوب عند ايجاد اول معامل يعطى واحد مع الرقم 3120
فلماذا اخترتها انت 17 ؟