הצפנת צופן Affine באמצעות Python

Hzpnt Zwpn Affine B Mz Wt Python



נושא התוכן:

  1. מבוא
  2. ידע מוקדם
  3. משוואת צופן אפינית
  4. הצפנת צופן Affine באמצעות Python
  5. הוכחה של רעיון או תאוריה
  6. סיכום
  7. שאלות נפוצות (שאלות נפוצות)

הצופן האפין מייצג סוג מסוים של צופן החלפה, הנכלל בקטגוריה של צפנים חד אלפביתיים. בניגוד לצופן הקיסר המפורסם יותר, שמעביר כל אות בטקסט רגיל במספר קבוע של שלושה עמדות, הצופן האפין משתמש בשני מפתחות (a ו-b). בחירת המפתחות צריכה לדרוש התייחסות מיוחדת.

ידע מוקדם

כדי להבין לעומק את הנושא של היום, עליך להבין את המושגים הבאים:







  • המחלק המשותף הגדול ביותר (GCD) ומספר ראשוני משותף
  • חשבון מודולרי

מושגים אלה מוסברים בפירוט במאמר הקודם שכותרתו 'גישה מתמטית של צופן קשור'.



משוואת צופן אפינית

נתחיל עם הנוסחה להצפנת ה-Affine:



E(x) = (a.x + b) mod m
לְשֶׁעָבַר) מציין הצפנה של האינדקס האלפביתי x
א ערך אינדקס של המפתח הראשון 'המיוחד'.
איקס ערך אינדקס של האות הפשוטה
ב ערך אינדקס של המפתח השני (ערך תזוזה נוסף)
mod m פעולות המודולו של הכמות הכוללת של האלפבית שהיא 26


תמונה חלופית וכיתוב : משוואת צופן אפינית





לדוגמה, אנו רוצים להצפין את הטקסט הפשוט 'BIMANDO' עם המפתחות 7 ו-13. באמצעות אינדקס הטבלה הבא, אנו ממירים תחילה את הטקסט הפשוט למספר המתאים לו:


תמונה חלופית וכיתוב : מספור אינדקס



הטקסט הפשוט 'BIMANDO' מומר למספר אינדקס ל-'1 8 12 0 13 3 14'.


תמונה חלופית וכיתוב : המר טקסט פשוט לערך מספור אינדקס

לאחר מכן, אנו מיישמים את חישוב המשוואה, והתוצאה מוצגת כדלקמן:


תמונה חלופית וכיתוב : הצפנת אפינית

אז, הטקסט הפשוט 'BIMANDO' מוצפן באמצעות צופן Affine עם מפתחות 7 ו-13, מה שמוביל ל-'URTNAIH'.

הצפנת צופן Affine באמצעות Python

כעת, נניח שאנו רוצים לשלוח הודעה סודית המכילה חבורה של פסקאות. ביצוע הצפנת Affine עם התהליך הידני לוקח הרבה מאמץ וזמן, ויש לו סיכוי גבוה לפספוס חישוב, נכון? לכן, אנו זקוקים לתוכנית אשר הופכת את תהליך ההצפנה Affine Cipher לאוטומטי. להלן התהליך שלב אחר שלב ליצירת תוכנית Python:

1. ייבא את הספריות הנדרשות
התוכנית שלנו מתחילה בייבוא ​​המודולים הדרושים כגון argparse, string ו-os עבור ניתוח ארגומנטים בשורת הפקודה, פעולות מחרוזות ופונקציונליות הקשורה למערכת ההפעלה, בהתאמה.

יְבוּא argparse
יְבוּא חוּט
יְבוּא אתה

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

אלף בית = חוּט . ascii_אותיות קטנות

3. פונקציית הצפנת Affine Cipher
זהו תפקיד הליבה של התוכנית שלנו. הוא לוקח את טקסט הקלט ושני מפתחות, 'a' ו-'b', ומחיל את הצפנת ה-Affine על הטקסט, תוך שמירה על מבנה הטקסט.

def affine_cipher_encryption ( טֶקסט , א , ב ) :
טקסט מוצפן = ''
ל לְהַשְׁחִיר ב טֶקסט:
אם לְהַשְׁחִיר. נמוך יותר ( ) ב אלף בית:
אם לְהַשְׁחִיר. הוא העליון ( ) :
טקסט מוצפן + = chr ( ( ( א * ( מִלָה ( לְהַשְׁחִיר. נמוך יותר ( ) ) - 97 ) + ב ) % 26 ) + 65 )
אַחֵר :
טקסט מוצפן + = chr ( ( ( א * ( מִלָה ( לְהַשְׁחִיר ) - 97 ) + ב ) % 26 ) + 97 )
אַחֵר :

4. בדיקה ראשית מותנית
בקוד הבלוק הזה, בדוק אם הוא מופעל כתוכנית הראשית. הוא מגדיר את מנתח הארגומנטים עם תיאורים עבור הסקריפט והארגומנטים שלו. הארגומנט הנדרש הוא רק נתיב של קלט קובץ טקסט. כאשר איננו מציינים את נתיב הפלט, אנו רוצים שהוא יגדיר ברירת מחדל לשם קובץ הקלט עם '_encrypted' מצורף אליו. עבור הארגומנט 'מפתחות', אנו רוצים שהוא יהיה בפורמט 'א, ב'. אבל אם נגדיר את זה, ברירת המחדל היא 5 ו-8.

אם __שֵׁם__ == '__רָאשִׁי__' :
מנתח = argparse. ArgumentParser ( תיאור = 'הצפנת צופן קשורה מקובץ טקסט' )
מנתח . הוספה_טיעון ( 'קובץ_קלט' , עֶזרָה = 'נתיב לקובץ טקסט הקלט' )
מנתח . הוספה_טיעון ( '-ק' , '--מפתחות' , סוּג = str , בְּרִירַת מֶחדָל = '5.8' , עֶזרָה = 'מפתחות לצופן Affine בפורמט 'a,b'' )
args = מנתח . parse_args ( )

א , ב = מַפָּה ( int , args. מפתחות . לְפַצֵל ( ',' ) )

עם לִפְתוֹחַ ( args. input_file , 'ר' ) כפי ש קוֹבֶץ :
טֶקסט = קוֹבֶץ . לקרוא ( )

# חלץ את שם הקובץ מנתיב קובץ הקלט
input_filename , סיומת = אתה . נָתִיב . פיצול ( args. input_file )
default_output_file = input_filename + '_מוצפן' + הרחבה

# הצפין את הטקסט באמצעות הצופן האפיני
טקסט מוצפן = affine_cipher_encryption ( טֶקסט , א , ב )

# כתוב את הטקסט המוצפן לקובץ חדש
עם לִפְתוֹחַ ( default_output_file , 'ב' ) כפי ש קוֹבֶץ :
קוֹבֶץ . לִכתוֹב ( טקסט מוצפן )

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

כעת, שמור אותו ב-'affine_cipher.py'. כעת, הפעל את התוכנית על ידי הקלדת הפקודה הבאה:

python affine_cipher. py

אם לא תמצא שגיאה, הפלט נראה כמו התמונה הבאה:


תמונה חלופית וכיתוב : תוכנית Affine Cipher Python

הוכחה של רעיון או תאוריה

יש לנו הודעה סודית עם השם הבא 'message.txt', ואנו רוצים לשדר אותה לחברים שלנו:


תמונה חלופית וכיתוב : טקסט פשוט

לכן, אנו משתמשים בתוכנה שיצרנו לפני שאנו רוצים להצפין את ההודעה הזו באמצעות צופן Affine עם המפתחות 3 ו-7. הפקודה היא כדלקמן:

python affine_cipher. py הוֹדָעָה. טקסט 3 , 7


תמונה חלופית וכיתוב : תוכנית Affine Cipher Python

במהירות של הרף עין, ההודעה המוצפנת נוצרת בהצלחה ונשמרת ב-'message_encrypted.txt'. בוא נבדוק איך נראית ההודעה:


תמונה חלופית וכיתוב : Affine Chiphertext

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

נסה זאת בעצמך

הורד את קוד המקור של התוכנית בדף GitHub שלנו בכתובת https://github.com/bimando/Affine-Cipher .

סיכום

לסיכום, שיטת הצפנת Affine cipher, סוג של צופן החלפה חד-אלפביתי, מציעה אבטחה משופרת באמצעות שימוש בשני מפתחות, הדורשת שיקול זהיר במהלך בחירת המפתח. הבנת המושגים כמו המחלק המשותף הגדול (GCD), מספרים ראשוניים משותפים וחשבון מודולרי חיוניים לתפיסת המורכבות של הצופן האפיני.

משוואת הצופן האפינית, E(x) = (a.x + b) mod m, משמשת ככלי הבסיסי להצפנה כאשר 'a' ו-'b' מייצגים את המפתחות ו-'x' מסמל את האינדקס של האות הפשוטה. ההטמעה של תוכנית Python אוטומטית עבור תהליך ההצפנה של Affine הוכחה כדי לייעל את משימות ההצפנה בקנה מידה גדול ביעילות. התוכנית משלבת את פונקציונליות המפתח לרבות ייבוא ​​ספריות, מיפוי אלפבית, פונקציית הצפנה וניתוח ארגומנטים בשורת הפקודה עבור נתיבי קלט ופלט. יש לציין כי הסקריפט מאפשר את הגדרות ברירת המחדל עבור המפתחות ושמות קבצי הפלט כדי להקל על תהליך הצפנה חלק.

שאלות נפוצות (שאלות נפוצות)

שאלה 1: מהו צופן האפין וכיצד הוא שונה מצופן קיסר?

A1: צופן Affine הוא סוג של צופן החלפה חד-אלפביתי שמשתמש בשני מפתחות, 'a' ו-'b', להצפנה. לעומת זאת, צופן הקיסר משתמש בהזזה קבועה של שלוש עמדות עבור כל אות בטקסט הפשוט.

שאלה 2. מהם התנאים המוקדמים להבנת הצופן Affine?

ת2: כדי להבין את הצופן האפין באופן יסודי, חיוני להבין מושגים כמו המחלק המשותף הגדול (GCD), מספרים ראשוניים משותפים וחשבון מודולרי.

ש 3: כיצד אוכל להצפין הודעה באמצעות צופן Affine ב-Python?

ת3: כדי להפוך את תהליך ההצפנה של Affine לאוטומטי, אתה יכול להשתמש בתוכנית Python המתוארת במאמר. התוכנית מצפינה ביעילות קלט טקסט בקנה מידה גדול, ומפשטת את הליך ההצפנה. המאמר מספק הוראות שלב אחר שלב על ייבוא ​​הספריות, הגדרת מיפוי האלפבית, יצירת פונקציית ההצפנה וניתוח הארגומנטים של שורת הפקודה עבור נתיבי קלט ופלט.