>> Zamyla צ'אן: בואו להגביר את שלנו משחק עם צופן ויז'נר.
צופן ויז'נר הוא דומה מאוד קיסר,
למעט קיסר עברנו ב שלם אחד כמפתח שלנו.
בשנת vigenere אנחנו הולכים לעבור את מילת המפתח.
אז, אם אני רוצה להעביר את המוצפן הזה הוא 50 CS ידי ohai,
אז זה אומר כי כל אות ohai הולך לשרת כמפתח,
ואני הולך מחזור מעל כי מילת המפתח עבור המשמרת שלי
מה שהופך את המוצפן הרבה יותר קשה לפענח.
>> מה זה אומר משמרת ידי מילת המפתח?
ובכן, מילת המפתח היא מחרוזת איפה כל אות תואמת
לכמה משמרת שלמה.
לכן, o מתאים מפתח של 14, h למקש של 7, יש מפתח של 0,
כך לא הייתי משנה דבר, יש ואז אני מפתח של 8.
>> תגיד רצתי vigenere עם טקסט רגיל זה גם CS50,
זה היה פשוט לתת לי מחרוזת ללא שינוי.
שימו לב כי זה שווה פועל קיסר עם מפתח של אפס.
למעשה, פועל vigenere עם כל תו בודד
יהיה שווה ריצה קיסר עם אותו שלם.
>> בסדר, אז, מאז הם כל כך דומים הייתי
למעשה ממליץ שאם אתה רוצה אתה יכול פשוט להעתיק הקיסר שלך
קוד לקוד vigenere שלך.
דברים ישתנו, אבל לפחות יש לך
עמוד שדרה כמה שאתה יכול לעבוד איתו.
מכיוון Todos זהה שאנחנו רוצים כדי לקבל את המפתח, לקבל את הטקסט הרגיל,
לְקַדֵד כי טקסט רגיל, ואז להדפיס את זה.
>> בדיוק כמו קיסר המפתח הוא הולך יועבר ב משורת הפקודה השנייה
טיעון כלול במדד argv 1, אבל זה שונה הפעם
כי זה חייב להיות אלפביתי.
אז, אנחנו צריכים לחזר על כל תו בודד באותה מפתח
שהמשתמש עבר, ולהבטיח שכל דמות היא האלפביתי
על מנת להמשיך.
>> ברגע שעשינו את זה, אז אנחנו יכול לקבל את מחרוזת מהמשתמש,
בדיוק כפי שעשינו בעבר.
ועכשיו, אנחנו מגיעים ללב הבעיה עבור vigenere,
וזה בדיוק כמו קיסר, איך להבין את דפוס ההצפנה
ומשוואה, ו לְקַדֵד בטקסט כולו.
>> אז, תבחין כי המשוואה עבור משמרת vigenere
הוא מאוד דומה לזו קיסר.
ההבדל היחיד הוא כי במקום k משתנה בודד
לפני, עכשיו k יש פירוט, המציין את המכתב JTH של המפתח.
>> בואו נבחן דוגמה.
נניח שאתה רוצה להעביר סוד הודעה על מושא אהבתך, אני מחבב אותך.
ובכן, עבור המפתח שלך אתה לבחור משהו שלך
למעוך יודע יודע שאתה אוהב, פנדות.
בסדר, אז איך אנחנו להעביר את זה?
>> ובכן, יש לנו מדד בטקסט שלנו.
זה במכתב הראשון כך הוא המדד בגין המפתח שלנו
שנמצא בחלק p, הראשון מכתב במילה פנדה שלנו.
אז, הסטה לי על ידי p נותן לנו x, אז אנחנו מתקדמים המדד בטקסט.
זה מגיע לנו מרחב.
עכשיו, תו הרווח הוא אלפביתי עישון,
כך אומר, כי רק העברות ישר אל המוצפן,
שמנו מרחב שם, ואנחנו לא לקדם את מדד המפתח שלנו.
אז, אנחנו עדיין בעמ בנקודה זו.
>> אנו להתקדם הבאים מדד בטקסט שלנו.
ועכשיו, כי זה מכתב, את L הקטנה,
אנחנו משמרת שעד המדד הבא המפתח שלנו.
איזו מהאפשרויות הבאות היא, שהוא אפס משמרת כך פשוט הופך
האות L ב המוצפן שלנו.
לאחר מכן, אנו לקדם הן בטקסט, ו מדד המפתח כי זה האלפביתי.
אז נמשיך כי עד שנגיע אל הדואר ב וכדומה.
>> בסדר, אז תבחין בזה בשלב זה, במונחים של מדד המפתח שלנו,
הגענו סוף מילת פנדה, אז מה
קורה כשנגיע לשלב הבא מכתב האלפביתי ב בטקסט?
ובכן, כל מה שקורה הוא שאנחנו לעטוף אל ההתחלה,
למדד הראשון של המפתח שלנו.
אז, אז אנחנו משמרים כי y על ידי p לתת לנו n.
ואז, אנו ממשיכים גמר קידוד בטקסט שלנו כדי לקבל נוה x lvne.
>> מתוך דוגמה זו, אני הראה כי אנו רק לקדם
למכתב הבא מילת המפתח אם הדמות בטקסט רגיל
מכתב הוא כך isalpha פונקציה תגיע שימושי כאן.
וזה, בדיוק כמו קיסר, אנחנו רוצים לשמר את המקרה, isupper ו islower.
אז, להוסיף קצת זה ב לתוך פסאודו הקוד שלך.
>> אז איך אנחנו להבין את משמרות מפתח?
ובכן, אם אתה זוכר את הדיון שלנו על מדדי אלפביתי של הקיסר
בעיה, זה מאוד דומה.
>> שם מקבילה ASCII ערך של 65 אבל שינוי של 0,
ואז את האות האחרונה באלפבית, Z,
מתאים משמרת של 25.
תוכל להבחין כי המעבר זהה אם לא
המכתב הוא במקרה גדול או קטן.
>> אוקיי, אז עכשיו אתה יודע איך להבין
משמרת מספרים מתאים תו בודד
בואו נחזור למשוואה שלנו.
כי יש לנו שתי שונים תחתי כאן, i ו j,
זה רמז כי אנחנו רוצים לעקוב אחר הוא מעמדנו בטקסט
כמו גם את מעמדנו מילת המפתח, אז אלו הם שני משתנים נפרדים
כי אנחנו רוצים לשמור על אחיזה של.
>> עכשיו, את המיקום בטקסט שלנו הוא הולך לגדול בכל פעם,
כך זה הולך להיות קצת יותר ישר קדימה
בניגוד לעמדת מילת המפתח, אשר אנו יודעים יש לעטוף,
ולפעמים להגדיל, לפעמים נשאר אותו הדבר.
אז, איך אנו מקיימים הפונקציונלי
כדי לעטוף את מדד עבור מילת המפתח?
>> אני הולך להשתמש התפקדתי למשל.
פִּקוּדִים היא דרך פופולרית לפצל אנשים לקבוצות.
שאצהיר 5 אנשים ורציתי לפצל אותם לשלוש קבוצות,
גם אז הייתי מתחיל ידי פִּקוּדִים.
האדם הראשון היה צוות אומר אני מספר אחד,
האדם הבא יהיה מספר קבוצה שני, מספר צוות בגוף שלישי
שְׁלוֹשָׁה.
עכשיו, אני רוצה רק שלוש קבוצות כל כך האדם הרביעי היה למעשה
נתחיל בהתחלה ולומר, טוב, אני מספר קבוצה אחת וכן,
והאדם הבא יהיה מספר הקבוצה שני.
וגם, ומשם, לאחר מכן הם יכולים להפריד לקבוצות שלהם.
>> אז, איך יכול אני משתמש מודולו כדי לעזור לי ליישם
זה התפקד לעטוף סביב פונקציה?
ובכן, האדם הראשון מספר 1, mod 3 נותן לנו 1.
2 mod 3 נותן לנו 2, ו -3 mod 3 נותן לנו 0.
>> האדם הרביעי, מספר 4, 3 mod נותן לנו 1, ולאחר מכן 5 mod 3 נותן לנו 2.
אז, תוכל להבחין כי למרות מספר האנשים שיש לי
מגדילה, והוא מעל 3, מאז אני modding ידי 3
אני תמיד מקבל מספרים 0, 1, ו -2.
אני אף פעם לא גדול מ -3.
אז, גם אם היה לי 10 אנשים, אז כל האנשים האלה
עדיין יהיה בתוך קבוצות 1, 2, או 0.
>> אז, עכשיו אנחנו יודעים שאם יש לנו קבוצה 5 ואנחנו mod כל אלה על ידי 3,
אז אנחנו אף פעם לא הולכים תעלה קבוצות 0, 1, או 2.
אז, אנחנו אף פעם לא הולכים לקבל קבוצה מספר זה שווה 3 ומעלה.
לכן, גם אם אני מוסיף עוד חמש אנשים, אז כולם
עדיין יהיה שהוקצו לקבוצות 0, 1, או 2 כי אני modding ידי 3.
ואני לא מתכוון לחרוג כובע זה.
>> אוקיי, אז בוא נראה אם ​​נוכל ליישם תפיסה זו של שימוש מודולו
כדי לעטוף את מספרי קבוצה ולהחיל
אותו vigenere לאן שאנחנו רוצים להשתמש מודולו כדי לעטוף
המדד עבור מילת המפתח.
למרות שאנחנו הגדלת המדד אנחנו תמיד
רוצה לוודא כי תמיד אנחנו לעטוף לתחילת מאוד
לא יעלה על אורך החוט.
>> אוקיי, אז אני יודע שזה יכול להיות קצת מוחץ.
יש עוד הרבה מה לעשות סט p זה.
לכן, ודא כי אתה כותב את פסאודו קוד טוב בעצמך
שאתה מבין שמקבל את העבודה.
נסו להתייחס לכל שורה אחת באופן עצמאי
להבין את כל המעט חתיכות קטנות של פאזל
לפני שמכניסים אותו יחד.
>> ודא שאתה יכול לקבל המפתח משורת הפקודה
ולהבטיח שזה האלפביתי, לקבל את הטקסט הרגיל מהמשתמש,
ולאחר מכן ב הצפנה, הקפד יודע איך להצפין אות אחת,
ולאחר מכן להתקדם אל השלם מחרוזת עם כל לעטוף פונקציות.
לבסוף, אתה יכול להדפיס את ההודעה המוצפנת.
>> שמי הוא Zamyla, וזה היה vigenere.