logo

تشفير فيجينير

مقدمة

تشفير vigenere هو خوارزمية تُستخدم لتشفير النص وفك تشفيره. تشفير فيجينير هو خوارزمية لتشفير نص أبجدي يستخدم سلسلة من شفرات قيصر المتشابكة. يعتمد على حروف الكلمة الرئيسية. إنه مثال على التشفير البديل متعدد الحروف. هذه الخوارزمية سهلة الفهم والتنفيذ. تم وصف هذه الخوارزمية لأول مرة في عام 1553 بواسطة جيوفان باتيستا بيلاسو . ويستخدم جدول Vigenere أو مربع Vigenere لتشفير النص وفك تشفيره. يُطلق على جدول vigenere أيضًا اسم الطاولة المستقيمة.

طريقتان تؤديان تشفير vigenere.

طريقة 1

عند إعطاء جدول vigenere، تتم عملية التشفير وفك التشفير باستخدام جدول vigenere (مصفوفة 26*26) بهذه الطريقة.

تشفير فيجينير

مثال: النص العادي هو 'JAVATPOINT'، والمفتاح هو 'BEST'.

لإنشاء مفتاح جديد، يتم تكرار المفتاح المحدد بطريقة دائرية، طالما أن طول النص العادي لا يساوي المفتاح الجديد.

تشفير فيجينير

التشفير

إدراج الخلية في

يتم دمج الحرف الأول من النص العادي مع الحرف الأول من المفتاح. يتقاطع عمود النص العادي 'J' وصف المفتاح 'B' مع أبجدية 'K' في جدول vigenere، لذا فإن الحرف الأول من النص المشفر هو 'K'.

وبالمثل، يتم دمج الحرف الثاني من النص العادي مع الحرف الثاني من المفتاح. يتقاطع عمود النص العادي 'A' وصف المفتاح 'E' مع الأبجدية 'E' في جدول vigenere، لذا فإن الحرف الثاني من النص المشفر هو 'E'.

تستمر هذه العملية بشكل مستمر حتى يتم الانتهاء من النص العادي.

النص المشفر = كينتوتغبوكس

فك التشفير

يتم فك التشفير عن طريق صف المفاتيح في جدول vigenere. أولاً، حدد صف الحرف الرئيسي، وابحث عن موضع حرف النص المشفر في هذا الصف، ثم حدد تسمية عمود النص المشفر المقابل كنص عادي.

جافا بول إلى السلسلة
تشفير فيجينير

على سبيل المثال، في صف المفتاح يوجد 'B' والنص المشفر هو 'K' ويظهر حرف النص المشفر هذا في العمود 'J'، مما يعني أن أول حرف نص عادي هو 'J'.

بعد ذلك، في صف المفتاح يوجد 'E' والنص المشفر هو 'E' ويظهر حرف النص المشفر هذا في العمود 'A'، مما يعني أن حرف النص العادي الثاني هو 'A'.

وتستمر هذه العملية بشكل مستمر حتى الانتهاء من النص المشفر.

نص عادي = جافات بوينت

الطريقة 2

عند عدم إعطاء جدول فيجينير، يتم التشفير وفك التشفير بواسطة صيغة فيجينار الجبرية بهذه الطريقة (تحويل الحروف (A-Z) إلى أرقام (0-25)).

صيغة التشفير هي

وأنا= (صأنا+ كأنا) مقابل 26

صيغة فك التشفير هي

دأنا= (هأنا- كأنا) مقابل 26

إذا كان الأمر كذلك (دأنا) تصبح القيمة سالبة (-ve)، وفي هذه الحالة سنضيف 26 إلى القيمة السالبة.

أين،

E يدل على التشفير.

تعطيل وضع المطور

D يدل على فك التشفير.

P يدل على النص العادي.

K يدل على المفتاح.

ملحوظة: يشير الحرف 'i' إلى إزاحة الرقم i من الحروف، كما هو موضح في الجدول أدناه.

تشفير فيجينير

مثال: النص العادي هو 'JAVATPOINT'، والمفتاح هو 'BEST'.

التشفير: وأنا= (صأنا+ كأنا) مقابل 26

نص عادي ج أ في أ ت ص يا أنا ن ت
قيمة النص العادي (P) 09 00 واحد وعشرين 00 19 خمسة عشر 14 08 13 19
مفتاح ب و س ت ب و س ت ب و
قيمة المفتاح (ك) 01 04 18 19 01 04 18 19 01 04
قيمة النص المشفر (E) 10 04 13 19 عشرين 19 06 01 14 23
النص المشفر ك و ن ت في ت ز ب يا X

فك التشفير: دأنا= (إأنا- كأنا) مقابل 26

إذا أصبحت قيمة (Di) في أي حالة سالبة (-ve)، ففي هذه الحالة، سنضيف 26 إلى القيمة السالبة. مثل الحرف الثالث من النص المشفر؛

ن = 13 و ق = 18

دأنا= (إأنا- كأنا) مقابل 26

دأنا= (13 - 18) مقابل 26

دأنا= -5 مقابل 26

إم في سي مع جافا

دأنا= (-5 + 26) مقابل 26

دأنا= 21

النص المشفر ك و ن ت في ت ز ب يا X
قيمة النص المشفر (E) 10 04 13 19 عشرين 19 06 01 14 23
مفتاح ب و س ت ب و س ت ب و
قيمة المفتاح (ك) 01 04 18 19 01 04 18 19 01 04
قيمة النص العادي (P) 09 00 واحد وعشرين 00 19 خمسة عشر 14 08 13 19
نص عادي ج أ في أ ت ص يا أنا ن ت

برنامج:

لغة سي

 #include #include using namespace std; int main() { Vigenere cipher(&apos;VIGENERECIPHER&apos;); string original = &apos;I AM INDIAN&apos;; string encrypted = cipher.encrypt(original); string decrypted = cipher.decrypt(encrypted); cout &lt;&lt; original &lt;&lt; endl; cout &lt;&lt; &apos;Encrypted: &apos; &lt;&lt; encrypted &lt;&lt; endl; cout &lt;&lt; &apos;Decrypted: &apos; &lt;&lt; decrypted &lt;&lt; endl; } class Vigenere { public: string key; Vigenere(string key) { for (int i = 0; i = &apos;A&apos; &amp;&amp; key[i] key += key[i]; else if (key[i]&gt;= &apos;a&apos; &amp;&amp; key[i] key += key[i] + &apos;A&apos; - &apos;a&apos;; } } string encrypt(string text) { string out; for (int i = 0, j = 0; i = &apos;a&apos; &amp;&amp; c <= 2 26 'z') c +="A" - 'a'; else if (c continue; out key[j] * 'a') % j="(j" 1) key.length(); } return out; string decrypt(string text) { for (int i="0," && <="z" ) 26) }; pre> <p> <strong>Output:</strong> </p> <pre> I AM INDIAN Encrypted: SDERFGTUJ Decrypted: IAMINDIAN </pre> <hr></=>