תוכן עניינים:

PNG זה תא סודי: 4 שלבים
PNG זה תא סודי: 4 שלבים

וִידֵאוֹ: PNG זה תא סודי: 4 שלבים

וִידֵאוֹ: PNG זה תא סודי: 4 שלבים
וִידֵאוֹ: University of Pittsburgh Patient & Family Program on POTS 2024, נוֹבֶמבֶּר
Anonim
ה- הזה הוא תא סודי
ה- הזה הוא תא סודי
ה- הזה הוא תא סודי
ה- הזה הוא תא סודי

האתגר שלך, קורא יקר, הוא להבין איזה מסר מוסתר בתמונת output-p.webp

שתי התמונות כאן נראות זהות אך הן אינן אלה תמונות greenman-p.webp

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

אספקה

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

שלב 1: מהי סטגנוגרפיה

כדאי לצפות בסרטון היוטיוב שקישרתי בשלב הקודם, אך הנה הסיכום:

אם אתה צריך להסתיר הודעה סודית לחבר, דרך מגניבה לעשות זאת היא באמצעות סטגנוגרפיה. הרעיון של דימוי סטגנוגרפיה הוא פשוט; תמונות מחשב עשויות פיקסלים, וכל פיקסל הוא שילוב של אדום, ירוק וכחול. בהרבה פורמטים של תמונת מחשב כמויות האדום, הירוק והכחול בכל פיקסל מתבטאות כערכים 0-127. כך, למשל, לפיקסל אדום מאוד יהיה ערך אדום של 127 וערכים ירוקים וכחולים של אפס. הטריק הוא כזה: עוצמה אדומה של 126 אינה ניתנת להפרדה מעוצמה אדומה של 127 (לעין אנושית). וכך על ידי התעסקות עם פלוס מינוס אחד בכל פיקסל אדום נוכל להסתיר סיביות בפיקסלים. אם נמצא דרך ערמומית לאסוף את החלקים בחזרה, נוכל לאחזר את הנתונים שגנבנו לתמונה!

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

שלב 2: כיצד מקודד טקסט במחשבים

כיצד מקודד טקסט במחשבים
כיצד מקודד טקסט במחשבים

מה שמופיע כאן עשוי לדרוש תואר CS או הרבה תשוקה תחביבים כדי להבין. מחשבים מאחסנים נתונים בביטים כ- 1s ו- 0s. 1s ו- 0s אלה מקובצים בדרך כלל בחבורות של 8 ומכונה "בתים". כפי שהוסבר כאן וכאן ישנן מספר דרכים בהן אנו יכולים לומר למחשב לפרש בתים כטקסט. כדי להפיק את המרב מההרצאה הסטגנוגרפית הזו/להדרכה, עליך להבין פחות או יותר את ASCII ו- UTF8. אלה שתי דרכים נפוצות לקודד נתוני שפה בסדרת בתים.

לאחר שתקבל מושג בנושא זה תבין זאת: ב- ASCII וב- UTF8 המילה "the" מיוצגת על ידי הבתים הבאים (ב- hex) 0x74 0x68 0x65. בבינארי, בתים אלה הם: 01110100b 01101000b 01101101b

יתר על כן, תבין שב- UTF8 אמוג'י פנים מחייכות מיוצג על ידי הבייטים הבאים (בהקס) 0xF0 0x9F 0x98 0x80. בבינארי בתים אלה הם 11110000b 10011111b 10011000b 10000000b.

בכל מקרה תראה בצילום המסך המצורף שהמחשב שלי עושה משהו עם הבייטים האלה. הדגשתי אותם בפלט התוכנית עם חיצים ו- "LOOK!" גדול.

שלב 3: כיצד פועלת התוכנית

הרכבת התוכנית מ- github קלה. קבל את הריפו המוצג בעמוד הראשי כאן ואז

התוכנית מופעלת כך משורת הפקודה: java Main input-p.webp

בדוגמאות המצורפות תראה שהפעלתי את java Main greenman-p.webp

אתה תעשה את אותו הדבר.

אם תסתכל על Main.java תראה שזה מה שקורה:

  1. התוכנית קוראת את התמונה למערך דו -ממדי
  2. התוכנית הופכת את ההודעה שסיפקת למערך בתים (בתים )
  3. לאחר מכן התוכנית משתמשת בכיתה MessageHider כדי להסתיר את תאי ההודעות במערך התמונות.
  4. לאחר מכן התוכנית כותבת את מערך התמונה 2d החוצה לקובץ (output.png) ובתוכו הנתונים הנסתרים. אם מסתכלים על התמונה הזו אין להבחין בינה לבין המקור
  5. לאחר מכן התוכנית קוראת output-p.webp" />

אז פחות או יותר הקוד עובד כפי שאנו מצפים.

שלב 4: מסקנה

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

מוּמלָץ: