דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
yossizY

yossiz

@yossiz
הפסקת מעקב מעקב
אודות
פוסטים
6.2k
נושאים
129
שיתופים
0
קבוצות
0
עוקבים
28
עוקב אחרי
0

פוסטים

פוסטים אחרונים הגבוה ביותר שנוי במחלוקת

  • אבטחת חשבונות
    yossizY yossiz
    רשתות

    @n123456
    אי אפשר לדבר על אבטחה בחלל ריק, כדי לדבר על אבטחה צריך לדעת מול מה אתה מתגונן
    ובכן, מה הדרכים הנפוצות שפורצים מקבלים גישה לחשבונות?
    נראה לי שיש שתי דרכים עקריים
    א. פריצה לשרת (או הגדרה יותר גנרית: דליפת מידע באיזשהו דרך מהשרת)
    ב. דיוג

    דרך פחות נפוצה:
    ג. סתם ניחוש

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

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

    • שימוש במנהל סיסמאות, כי מנהל הסיסמאות לא יפול בפח וידע מיד שהכתובת של האתר הוא לא הכתובת הנכונה ולא יציע לך את הסיסמה של האתר האמיתי
    • יש צורות אימות דו שלבי שמוגנים מפני סכנה זו - לא כולם
    • זהירות על איזה קישורים אתה לוחץ ובאיזה אתרים אתה מכניס סיסמאות

    לגבי סכנת "סתם ניחוש"
    סיסמה חזקה הוא הגנה כמעט הרמטית נגד זה

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

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


  • הפורום כ"כ מקצועי אז..למה?
    yossizY yossiz
    רשימת הצעות, בקשות ודיווח באגים

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


  • משתמשי אדובי [Ps, Id, Ai], רוצים יותר שליטה עם העכבר? X-Mouse Button Control!
    yossizY yossiz
    מדריכים

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

    כדי לקבל התנהגות זו בתוכנות אינדיזיין, פוטושופ ואילוסטרייטר, תוריד התוכנה X-Mouse Button Control (זה מגיע גם כתוכנה ניידת בלי צורך בהתקנה), ותעתיק קובץ הגדרות זה לתיקייה של התוכנה [שם הקובץ צריך להיות XMBCSettings.xml]. זהו.

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


  • כללים לחיפושי גוגל יעילים
    yossizY yossiz
    אינטרנט

    @בערל אמר בכללים לחיפושי גוגל יעילים:

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

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


  • כללים לחיפושי גוגל יעילים
    yossizY yossiz
    אינטרנט

    @clickone אמר בכללים לחיפושי גוגל יעילים:

    אם זה שגיאה, הרבה פעמים במקום לשאול, פשוט תעתיקו את לשון השגיאה

    חשבתי לכתוב את זה, אבל לכשתמצא לומר, זה יוצא מתוך הכלל השני שכתבתי.


  • עקיפת מגבלת הדבקת טקסט באתרים ממשלתיים
    yossizY yossiz
    אינטרנט

    @כוספים-למשיח הקוד הזה עובד באתר שהבאת, אולי בעוד אתרים זה יעבוד

    javascript:$('input').unbind('paste')
    

    (עוד כיוון אפשרי: https://stackoverflow.com/a/68939139)


  • תמונות במייל - ביטול לראות תמיד תמונות ממייל מסוים
    yossizY yossiz
    אינטרנט

    @מוטי-0
    a5997974-1151-41d7-a8d6-125c615c8eec-CleanShot 2022-07-06 at 14.09.30@2x.png


  • מחפש מדריך ללמוד אבטחת אתרים
    yossizY yossiz
    אינטרנט

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


  • נוהל דיווח על פירצה באתר
    yossizY yossiz
    אינטרנט

    @אבי אמר בנוהל דיווח על פירצה באתר:

    אחרי הטיפול

    בהנחה האופטימית שהם יטפלו בזה במהירות...

    תהיו בהלם מרמת המחדל

    אתר ישראלי? לא תצליח להפתיע אותי...

    מה הנוהל הנכון לדווח על זה?

    הבעיה היא שאין נוהל...

    אפשר לנסות מייל לכתובת security@domain
    או למצוא פרטי קשר אחרים.
    יש חברות שמשלמים לחוקרי אבטחה על פריצות, אבל במקרים כאלו הם מפרסמים את זה איפשהו.
    אפשר לחפש פה: https://www.hackerone.com אם הם נמצאים. רוב הסיכויים שלא...
    (עריכה: אני רואה עכשיו שיש להם שירות שאם נתקלת בבעיות בדווח באג הם עוזרים לך לדווח גם אם לחברה אין קשר להם)
    יש יוזמה לעשות תקן עבור פרסום דרכי יצירת קשר ועוד בנושאי אבטחה בקובץ security.txt, לדוגמה הנה הפרטים של גוגל: https://www.google.com/.well-known/security.txt, תבדוק אם לחברה זו יש קובץ כזה.


  • סיסמה ארוכה באתר "בנק" הדואר
    yossizY yossiz
    אינטרנט

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

    השתמשתי בתוכנת mitmproxy (תוכנה חינמית אפשר להוריד עבור ווינדוס כאן: https://snapshots.mitmproxy.org/5.2/mitmproxy-5.2-windows-installer.exe)

    אחרי התקנה מריצים mitmproxy ui מתפריט ההתחלה. זה פותח חלון CMD וממשק גרפי בדפדפן. עכשיו הפרוקסי מאזין על פורט 8080. צריך להגדיר בהגדרות פרוקסי של ווינדוס שיעביר את הכל דרך localhost:8080.

    אם אתה בנטפרי צריך ללחוץ בממשק הגרפי בדפדפן על options > edit options, ושם להפעיל את אופציית ssl_insecure.

    תוודא שאתה רואה את תעבורת הרשת עוברת דרך mitmproxy. אתה אמור לראות רשימה של כל הבקשות שהולכת ומתמלאת.

    תבדוק בכלי הפיתוח של כרום בכרטיסיית network ותמצא את הבקשה ששולחת את הסיסמה. נסה למצוא ב-url של הבקשה איזה מחרוזת ייחודית שניתן לחפש לפיה.

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

    בקשות שנעצרו מופיעים בכתום ברשימה, ולחיצה על השורה מאפשר לך לבדוק את תוכן הבקשה. לחיצה על סימן ה-✏ בצד ימין למעלה מאפשר עריכה של הבקשה, עכשיו הלחצן מופיע עם סמליל ✔ ולחיצה עליו שומר את השינויים.

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

    אם עשית את הכל כשורה אתה אמור להצליח ליכנס לאתר...

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

    בהצלחה!


  • אפשר לעשות קישור למלל מסויים בדף, הידעתם?
    yossizY yossiz
    אינטרנט

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


  • מינוס במוניטין
    yossizY yossiz
    על הפורום

    @שני-התולעת הצבעה נגד פוסט (לחיצה על 🔽) מוריד מוניטין


  • העיצוב החדש בפורום
    yossizY yossiz
    על הפורום

    סליחה מכולם... אבל על טעם וריח וכו' מקווה שיהיה מתישהו משהו שמרצה את כולם...


  • עזרה בבניית אפליקציה לפורום מבוסס node bb
    yossizY yossiz
    תכנות

    @kernel כתב בעזרה בבניית אפליקציה לפורום מבוסס node bb:

    אין מנוע js נורמלי לאנדרואיד חוץ מכרומיום וגם הוא לא משובח מדי באנדרואיד

    לא הבנתי, אם מנוע כרומיום לא טוב אז מה כן טוב?

    @kernel כתב בעזרה בבניית אפליקציה לפורום מבוסס node bb:

    אלא שתקבל טקסט של שפה ייעודית
    ותריץ אותו מxml וjava מוכן מראש

    לא כדאי להביא את הרעיונות שלך על איך לבצע ל-AI אם אין לך רעיון מאוד מוצק, כי ה-AI יודע יותר טוב ממך איך לבצע, אתה אמור להביא לו בעיקר את היעד והוא יבחר איך לבצע. זה לא כלל ברזל, אבל במקרה הזה נראה לי שזה תקף, עזוב JAVA או XML, תן לו לעשות את העבודה הזאת לבד

    הצעה לפרומפט ראשוני:

    based on these docs:
    https://docs.nodebb.org/api/read/
    https://docs.nodebb.org/api/write/
    Can you build a native Android app that offers all basic functionality to use a nodebb forum?
    

    (פרומפט בעברית גם טוב, פשוט זה פחות או יותר פרומט שנתתי עכשיו לקלוד לראות מה הוא יבנה עם זה, לדעתי התוצאה הראשונה יביא כבר 70+ אחוז מהמוצר)
    לגבי לקבל העיצוב הספציפי של הפורום וה-UI הייחודי שלו: זה חייב webview או עבודה קשה מאוד (מאוד!) שלא כדאי, תתפשר על UI ג'נרי שמתאים לכל פורום nodebb


  • איך למדתם לכתוב קוד - סקר
    yossizY yossiz
    תכנות

    @eido כתב באיך למדתם לכתוב קוד - סקר:

    אבל התכוונתי ללמוד של כתיבת קוד (כמו שכתבתי בהודעה הראשונה) לא לימוד שפת תכנות, בעיני אלו שני דברים שונים

    אלו בהחלט דברים שונים לגמרי
    חייבים להתחיל בלימוד שפת תכנות, אבל זה החלק הקל יחסית, הלימוד של "כתיבת קוד" או "מבנה נכון של הקוד" הוא לימוד שלעולם לא משלימים, וגם קשה למסור אותו בכללים מדויקים בכתב, יש ספרים בנושא, כמו הספר המפורסם clean code של uncle bob, אבל לא כולם מסכימים לעקרונות שלו, וזה לא מתאים לכולם, וגם אחרי קריאת הספר עדיין צריך להפנים את הדברים וכו', בקיצור בעיני זה החלק הכי קשה של תכנות
    אני לא חושב שתמצא קורס שיקנה לך את היכולת לבנות בצורה נכונה
    כן תוכל למצוא "רב" בנושא שזה יקדם מאוד


  • ייעוץ לגבי טכנולוגיות לפרויקט
    yossizY yossiz
    תכנות

    @Sara-Rivka כתב בייעוץ לגבי טכנולוגיות לפרויקט:

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

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

    אם לגוון – אילו טכנולוגיות לדעתכם כדאי להכיר כיום?

    יש בלי סוף תשובות...

    לדוגמה:

    משהי כתבה לי "נראלי כדאי לך להכיר פלאטר בפיתוח אפליקציות"

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

    האם כדאי באמת?

    כן ולא. זו התשובה היחידה הנכונה. 🙂

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

    כן. בדיוק מה שאתם כבר מכירים. נוד וריאקט.

    נ.ב. אשמח גם לעצות כלליות

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


  • איך לוודא שסגירת משאבים תתבצע גם בעת עצירת ניפוי באגים ב-Visual Studio?
    yossizY yossiz
    תכנות

    @pcinfogmach עכשיו אני מבין ששאלת שאלה חזקה.
    כמה מחשבות שעולות לי:

    • סתם מחשבה: העניין הזה שהתוכנה נסגרת בלי לנקות אחריו עלול לקרות גם ב-"production". אי אפשר לסמוך על זה שהתוכנה לא תקרוס או מאיזה סיבה אחרת תיסגר בצורה "לא נקיה". אם כן כדאי לתת את הדעת על איך התוכנה תוכל להתמודד עם מצב זה בצורה אוטומטית עד כמה שאפשר.

    ℹ לידיעה (להבין את תהליך המחשבה שלי בנושא): מה קרה לתוכנה כאשר ה-UI "תקוע"?
    הלב הפועם של כל תוכנה גרפית בווינדוס הוא ה-message loop. זה "לולאה קיומית" שכל תוכנה גרפית נמצא בו כל הזמן, הלולאה מקבלת "אירועים" ממערכת ההפעלה (לדוגמה לחיצות מקשים ותזוזות עכבר וכו') ומטפלת בהם. בד"כ הלולאה רצה על הת'רד הראשי. תוכנה שתקועה, הכוונה שהלולאה הראשית הפסיקה לטפל באירועים, בד"כ כי הוא אוחז באמצע פעולה ארוכה או תקועה.
    כל אינטראקציה עם תוכנה גרפית שולחת אירוע ללולאה, אם הלולאה תקועה, התוכנה לא תגיב. לכן אי אפשר לסגור אותה עם האיקס האדום כי זה פועל על ידי שליחת אירוע ל-message loop

    • המחשבה הבאה שלי היתה שאפשר לסגור תוכנה שלא מגיבה על ידי קריאת פונקציה בחלון ה-Immediate Window
      לשם בדיקת הצעה זו יצרתי פרוייקט WPF (לפי ההיסטוריה שלך אני מניח שגם התוכנה שלך WPF) והוספתי Sleep ארוך בת'רד הראשי, ואז ניסיתי לסגור את התוכנה באמצעות ה-Immediate Window
      הקוד שניסיתי:
    Application.Current.Shutdown()
    

    התוצאה בתמונה:
    ee73c8c1-3183-4057-a1b3-9c967941be63-image.png

    בשלב הראשון קיבלתי את ההודעה הראשונה, אחרי חיפושים פתרתי אותה על ידי ההגדרה Tools > Options... > Debugging > General > Suppress JIT optimization on module load
    ואז קיבלתי את ההודעה השניה
    בשלב הזה התייאשתי מכיוון זה
    ייתכן שיש מקרים של תקיעה שבהם זה כן יכול לעבוד

    • כיוון נוסף שחשבתי:
      הצורה שווינדוס מטפלת באירוע ctrl+c בקונסול, שונה מהטיפול באירועיים "גרפיים". בקונסול כאשר לוחצים ctrl+c, ווינדוס יוצרת ת'רד חדש בתהליך ובתוך הת'רד החדש קורא למטפל באירוע.
      (מתועד פה: https://learn.microsoft.com/en-us/windows/console/handlerroutine)
      אם ככה, גם תהליך שלא מגיב לאירועים גרפיים אמור להגיב ל-ctrl+c בקונסול!
      יצרתי פרוייקט נסיון
      החלקים הרלוונטיים:
      בקובץ ה-csproj הוספתי ככה (כתבתי את זה ידני, לא מצאתי דרך לעשות את זה ב-UI)
      <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
    	  <OutputType>Exe</OutputType>
      </PropertyGroup>
    

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

    בקובץ app.xaml.cs:

            public void App_Startup(object sender, StartupEventArgs e)
            {
    #if DEBUG
                Console.CancelKeyPress += (s, e) =>
                {
                    // Do cleanup
                };
    #endif
            }
        }
    

    ניסיתי את הקוד ונראה שזה פועל כרצוי

    ⚠ אבל שים לב: מכיון שהקוד ב-CancelKeyPress רץ בת'רד נפרד, ייתכנו השלכות לא צפויות! ראה הוזהרת!

    נ.ב בהתחלה חשבתי שאוכל לכתוב בתוך ה-CancelKeyPress רק את השורה Application.Current.Shutdown ואז להסתמך על אירוע Exit לעשות את הנקיון, אבל מתברר שאירוע Exit מטופל על ידי הת'רד הראשי, ואם הוא תקוע זה לא יתבצע

    נהניתי מחקירת הנושא

    אשמח להערות רעיונות ושיפורים


  • בעיה בשימוש עם text to speech בשפת PHP
    yossizY yossiz
    תכנות

    @ששא כתב בבעיה בשימוש עם text to speech בשפת PHP:

    עד שתפסתי שהפעלתי בפרוייקט אחר שלא קשור לזה.....

    אז למעשה פתרת את הבעיה?

    לא כתבתי את נוסח השגיאה

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


  • SQL | בדיקה האם ערך מסויים קיים במסד נתונים
    yossizY yossiz
    תכנות

    @liy770

    SELECT EXISTS(SELECT * FROM Z WHERE Y = X);
    

  • חילוץ מפתח XOR מתוך מספרים ממויינים
    yossizY yossiz
    תכנות

    הסבר הקוד הנ"ל

    השיטה לחלץ את המפתח בנויה על שתי ההערות הבאות:

    פעולת XOR:

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

    מספרים בינאריים עוקבים:

    אפשר ליצור רצף של מספרים עוקבים בינאריים אם נעקוב אחרי שני כללים פשוטים:

    • בכל איטרציה נחליף את הערך של הביט הכי ימני
    • כל ביט שערכו הופך מ-1 ל-0, גורר שינוי בביט שלשמאלו

    למשל, אם נתחיל במספר 0

    • איטרציה 1: נחליף את הערך של הביט הכי ימני => קיבלנו 1
    • איטרציה 2: נחליף את הערך של הביט הכי ימני, יצא 0, עכשיו לפי הכלל השני זה מחייב אותנו לשנות את הביט שלשמאלו מ-0 ל-1 => קיבלנו 10
    • איטרציה 3: כלל 1 => 11
    • איטרציה 4: כלל 1 נותן לנו 10 כלל 2 מחייב שינוי בביט השני , קיבלנו 00 שוב כלל 2 מחייב שינוי בביט השלישי => קיבלנו 100

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

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

    והנה במספרים שמוצפנים בשיטת XOR, כבר אי אפשר לדעת אם ה-1 הוא 1 או 0 אבל עדיין אפשר לדעת שמספרים אינם עוקבים לפי הכלל השני, אם נראה שינוי בביט שמאלי כאשר אין שינוי בביט שלימינו נדע שהמספרים לא עוקבים

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

    ומכאן להסבר הקוד:

    הקוד מתחיל עם כמה פוקציות עזר, היחיד מביניהם שאולי דורש הסבר זה makeBitmask
    התפקיד של פונקציה זו היא ליצור "מסיכה" של ביטים באורך מסויים. (נראה בהמשך למה זה שימושי). דרך אחת לעשות את זה הוא על ידי פעולת right shift על מספר שמורכב רק מביטים של 1. אז אנו לוקחים את המספר -1 שבשיטת ‎2's complement (שיטת ייצוג מספרים שלמים במעבדים) הוא מורכב מרצף של 32 (או 64) ביטים של 1., ואז אנו עושים פעולתunsigned right shift עליו כדי לדחוף את המספר הנכון של ביטים של 0 משמאל.
    הקוד לקחתי מפה: https://stackoverflow.com/a/43894311

    function makeRand (max) {
      return Math.floor(Math.random() * max)
    }
     
    function makeRange (start, length) {
      const ret = []
      for (i = 0; i < length; i++) {
        ret.push(start + i)
      }
      return ret;
    }
     
    function makeBitmask(width) {
      return width && -1 >>> 32 - width;
    }
    

    פה אנו יוצרים את רשימת המספרים ומפתח אקראי בין 1 - 1000

    const KEY = makeRand(1000)
     
    const nums = makeRange(makeRand(1000), 60)
     
    // console.log('Numbers:', nums)
    

    כאן אנו מגיעים לבשר:
    שלב ראשון נרצה למצוא את המספר שבו הכי הרבה ביטים משתנים בו לעומת המספר הקודם, כי זה יאפשר לנו לגלות הכי הרבה ביטים של המפתח (יצויין, לא תמיד אפשר לגלות את כל הביטים, הקוד שלי מגלה את המקסימום האפשרי)
    זה התפקיד של הלולאה.
    תוך כדי כך אנו בודקים גם כן שמדובר במספרים עוקבים
    הבדיקה היא על ידי XOR עם המספר הקודם.
    זה נותן לנו ביט של 1 בכל מיקום שהקודם היה 0 והנוכחי 1 או הפוך, הוי אומר - כל ביט שהשתנה לעומת המספר הקודם
    קיבלנו מפה של ביטים
    כדי לוודא שמדובר במספר עוקב אנו צריכים לבדוק שהשינויים זורמים מימין לשמאל, זה נעשה על ידי בדיקה שהמספר מורכב מביטים של 1 בלבד (מספר כזה יש לו רק ביטים של 1 לצד ימין).
    יש דרכים לבקוד את זה, אני השתמשתי בדרך קצת טריקית (חכמה 😏 ) שמובאת פה: https://www.geeksforgeeks.org/check-bits-number-set ה-method 2

    function extractXORKeySeq (numList) {
      let bestDiff, bestIndex
      bestDiff = bestIndex = -1
       
      for (let i = 1; i < numList.length; i++) {
        const diff = numList[i] ^ numList[i-1]
        if (diff & (diff + 1)) {
          throw new Error('Numbers are not sequential!')
        }
        if (diff > bestDiff) {
          bestDiff = diff
          bestIndex = i
        }
      }
    

    מקווה שעד כאן מובן,
    ואם כן, הרי קיבלנו את המספר שהכי השתנה בביטים מהמספר הקודם
    עכשיו אנו לוקחים את מפת הביטים ו-
    א. האורך של מפת הביטים זה האורך המקסימלי של המפתח שנוכל לחלץ (אנו מקבלים את האורך על ידי הפיכה למחרוזת ומדידת האורך, בטח יש דרכים יותר חסכוניות, חכמות, טריקיות לזה...)
    ב. נרצה לדעת מתוך זה איזה ביטים השתנו מ-0 ל-1 כי אלה הם הביטים שלא היו אמורים לגרור שינוי בביט שלימינם, ואם הם גררו שינוי - סימן שהם הפוכים (כלומר, ערכם 1 במפתח ה-XOR)
    ג. הביט הכי שמאלי, נרצה לבדוק שהוא שינוי מ-0 ל-1 אחרת הוא היה אמור לגרור עוד שינוי בביט שלשמאלו
    לשם ב וג הנ"ל אנו עושים XOR של המפה עם המספר הקודם, רק שלפני כן אנו הופכים את הביט שמקביל לביט הכי שמאלי של המפה, דוק ותשכח שזה נותן לנו את המידע
    אח"כ אני "מנקים" את שאר המספר (הופכים ל-0) על ידי פעולת AND עם מסיכה שאנו יוצרים עם פונקציית העזר הנ"ל
    והנה קיבלנו את התוצאה!

      const previous = numList[bestIndex - 1]
      const extractLen = bestDiff.toString(2).length
      const keyBits = bestDiff ^ (previous ^ (1 << (extractLen - 1))) & makeBitmask(extractLen)
     
      return [extractLen, keyBits]
    }
    

    אני מקווה שנהניתם מהאתגר והפתרון, אני מאוד מאוד נהניתי undefined
    תודה ל @DOVID!

  • 1
  • 2
  • 11
  • 12
  • 13
  • 14
  • 15
  • 258
  • 259
  • 13 / 259
  • התחברות

  • אין לך חשבון עדיין? הרשמה

  • התחברו או הירשמו כדי לחפש.
  • פוסט ראשון
    פוסט אחרון
0
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום