logo

Vigenere Chipher

מבוא

צופן Vigenere הוא אלגוריתם המשמש להצפנה ולפענוח הטקסט. צופן הוויגנרה הוא אלגוריתם של הצפנת טקסט אלפביתי המשתמש בסדרה של צפני קיסר שזורים. זה מבוסס על אותיות של מילת מפתח. זוהי דוגמה לצופן החלפה רב-אלפביתי. אלגוריתם זה קל להבנה ויישום. אלגוריתם זה תואר לראשונה בשנת 1553 על ידי ג'ובן בטיסטה בלסו . הוא משתמש בטבלת Vigenere או בריבוע Vigenere להצפנה ופענוח הטקסט. טבלת הוויגנרה נקראת גם טבולה רקטה.

שתי שיטות מבצעות את צופן הוויגנרה.

שיטה 1

כאשר ניתנת טבלת Vigenere, ההצפנה והפענוח נעשים באמצעות טבלת Vigenere (26 * 26 מטריצה) בשיטה זו.

ויג'נר צופן

דוגמה: הטקסט הפשוט הוא 'JAVATPOINT', והמפתח הוא 'BEST'.

כדי ליצור מפתח חדש, המפתח הנתון חוזר על עצמו בצורה מעגלית, כל עוד אורך הטקסט הפשוט אינו שווה למפתח החדש.

ויג'נר צופן

הצפנה

python os listdir

האות הראשונה של הטקסט הפשוט משולבת עם האות הראשונה של המפתח. העמודה של הטקסט הפשוט 'J' ושורה של המפתח 'B' חותכת את האלפבית של 'K' בטבלת הוויגנריה, כך שהאות הראשונה של טקסט צופן היא 'K'.

באופן דומה, האות השנייה של הטקסט הפשוט משולבת עם האות השנייה של המפתח. העמודה של טקסט פשוט 'A' ושורה של מפתח 'E' חותכת את האלפבית של 'E' בטבלת הוויגנריה, כך שהאות השנייה של טקסט צופן היא 'E'.

תהליך זה נמשך ברציפות עד לסיום הטקסט הפשוט.

טקסט צופן = KENTUTGBOX

פענוח

Java קרא קובץ שורה אחר שורה

הפענוח נעשה על ידי שורת המפתחות בטבלת vigenere. ראשית, בחר את השורה של אות המפתח, מצא את מיקום אות הטקסט המוצפן באותה שורה, ולאחר מכן בחר את תווית העמודה של טקסט ההצפנה המתאים כטקסט פשוט.

ויג'נר צופן

לדוגמה, בשורה של המפתח הוא 'B' והטקסט המוצפן הוא 'K' ואות ההצפנה הזו מופיעה בעמודה 'J', כלומר האות הפשוטה הראשונה היא 'J'.

לאחר מכן, בשורה של המפתח הוא 'E' וטקסט ההצפנה הוא 'E' ואות ההצפנה הזו מופיעה בעמודה 'A', כלומר האות השנייה היא 'A'.

תהליך זה נמשך ברציפות עד לסיום טקסט ההצפנה.

טקסט פשוט = JAVATPOINT

שיטה 2

כאשר טבלת הוויגנרה אינה ניתנת, ההצפנה והפענוח נעשים על ידי נוסחה אלגברית של Vigenar בשיטה זו (המר את האותיות (A-Z) למספרים (0-25)).

נוסחת ההצפנה היא,

ואני= (עמ'אני+ קאני) נגד 26

נוסחת הפענוח היא,

דאני= (האני- קאני) נגד 26

אם בכל מקרה (דאני) הערך הופך לשלילי (-ve), במקרה זה, נוסיף 26 בערך השלילי.

איפה,

E מציין את ההצפנה.

... ב-java

D מציין את הפענוח.

P מציין את הטקסט הפשוט.

K מציין את המפתח.

הערה: 'i' מציין את ההיסט של המספר ה-ith של האותיות, כפי שמוצג בטבלה שלהלן.

ויג'נר צופן

דוגמה: הטקסט הפשוט הוא 'JAVATPOINT', והמפתח הוא 'BEST'.

הצפנה: ואני= (עמ'אני+ קאני) נגד 26

טקסט פשוט י א IN א ט פ O אני נ ט
ערך טקסט רגיל (P) 09 00 עשרים ואחת 00 19 חֲמֵשׁ עֶשׂרֵה 14 08 13 19
מַפְתֵחַ ב ו ס ט ב ו ס ט ב ו
ערך מפתח (K) 01 04 18 19 01 04 18 19 01 04
ערך טקסט צופן (E) 10 04 13 19 עשרים 19 06 01 14 23
טקסט צופן ק ו נ ט IN ט G ב O איקס

פענוח: דאני= (האני- קאני) נגד 26

אם ערך כלשהו (Di) הופך לשלילי (-ve), במקרה זה, נוסיף 26 בערך השלילי. כמו, האות השלישית של טקסט הצפנה;

N = 13 ו-S = 18

דאני= (האני- קאני) נגד 26

דאני= (13 - 18) מול 26

היבה בוכרי

דאני= -5 מול 26

דאני= (-5 + 26) מול 26

דאני= 21

טקסט צופן ק ו נ ט IN ט G ב O איקס
ערך טקסט צופן (E) 10 04 13 19 עשרים 19 06 01 14 23
מַפְתֵחַ ב ו ס ט ב ו ס ט ב ו
ערך מפתח (K) 01 04 18 19 01 04 18 19 01 04
ערך טקסט רגיל (P) 09 00 עשרים ואחת 00 19 חֲמֵשׁ עֶשׂרֵה 14 08 13 19
טקסט פשוט י א IN א ט פ O אני נ ט

תכנית:

שפת ג

 #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></=>