ערב התמיכה הגרוע ביותר של שנות WP Adminify שלי התחיל עם מסך לבן.We'd דחף את גרסה 3.1.2 לשרת העדכונים בסביבות 11 בערב, ועד 2:40 לפנות בוקר היו לי 14 כרטיסים שאמרו את אותו הדבר: עדכון מותקן, האתר מת. התגלגלתי לאחור, בדקתי מחדש את הרוכסן במחשב שלי - עבדתי בצורה מושלמת. אותה גרסה. אותו קובץ. כביכול.
לקח לי זמן מביך לעשות את הדבר הברור מאליו: hash שני הקבצים. ה SHA-256 של הרוכסן במחשב הנייד שלי וה-SHA-256 של הרוכסן שיושב בשרת העדכון did't match.לא קרוב אפילו - תקצירים שונים לגמרי ההעלאה נקטעה איפשהו באמצע ההעברה, השרת הגיש בשמחה ארכיון שבור, ו-PHP נחנק מהקבצים הלא שלמים שבתוכו השוואה אחת של סכום בדיקה הייתה תופסת אותו לפני שמשתמש בודד עודכן. לאחר אותו לילה, כל מהדורת WP Adminify הודפסה את ה-SHA-256 שלה ביומן הפריסה, וסקריפט ההעלאה סירב לפרסם אלא אם ה-hash המרוחק תואם לזה המקומי. אפס מהדורות פגומות מאז.
That's מה זה גיבוב, במיטבו המעשי: טביעת אצבע לנתונים. Feed בקובץ או במחרוזת, קבל בחזרה תקציר קצר באורך קבוע. If even one byte changes - a flipped bit, a truncated download, a sneaky edit - the digest changes completely.I now reach for a hash generator online multiple times a week: verifying downloads, debugging webhook signatures, comparating config files across environments, sanity-checking that two "identical" files inactally are.
וזו הסיבה שבניתי אחד לתוך Toolz.dev. רציתי כלי גיבוב שמחשב הכל בדפדפן, מראה לי MD5, SHA-1, SHA-256 ו-SHA-512 זה לצד זה, ולעולם לא מעלה בייט של הקלט שלי לשום מקום. מדריך זה מכסה כיצד להשתמש בו, מה ' קורה למעשה מתחת למכסה המנוע, והטעות היחידה עם הגיבוב שעשיתי בעצמי בשלב מוקדם - ושאני עדיין רואה בבסיסי קוד היום.
TL;DR: השתמש ב Toolz.dev Hash Generator כדי לחשב MD5, SHA-1, SHA-256 ו-SHA-512 מתעכלים מטקסט או קבצים, באופן מיידי ומלא בדפדפן שלך דרך ה-Web Crypto API. ברירת מחדל ל-SHA-256 לכל דבר שחשוב; התייחסו ל-MD5 ו-SHA-1 כאל סכומי בדיקה מדור קודם בלבד. ולעולם - לעולם - השתמש באף אחד מאלה עבור סיסמאות. That's bcrypt או טריטוריה של Argon2.
תכונות מפתח
אלגוריתמים מרובים בבת אחת
הדבק את הקלט שלך פעם אחת וקבל את MD5, SHA-1, SHA-256 ו-SHA-512 מחושבים בו זמנית. זה נשמע כמו נוחות קטנה עד שאתה ' מנפה באגים במישהו אחר 's מערכת ואתה don' לא יודע באיזה אלגוריתם הם השתמשו. I' הפסדתי זמן אמת לזה - שער תשלום 's docs אמרו "SHA hash" ללא מספר מחובר, וישבתי שם ויצרתי עיכולים אלגוריתם אחד בכל פעם בטרמינל עד שאחד תואם. עם כל ארבעת העיכובים על המסך בבת אחת, אתה פשוט גלגל עין איזה מהם מתיישר עם הערך שאתה ' מנסים להתאים. זה גם הופך את ההבדלים לקרביים: אתה יכול לראות את MD5 בן 32 התווים ליד SHA-512 בן 128 התווים ולהבין מיד מה "digest size" אומר בפועל.
גיבוב טקסט וקבצים
הקלד או הדבק מחרוזת, או זרוק קובץ - הכלי מטפל בשניהם. hashing טקסט מכסה את המקרים היומיומיים: ניפוי באגים בחתימת API, מפתחות מטמון, השוואות מהירות גיבוב קבצים הוא המקום שבו מתרחשת עבודת האימות האמיתית. בדיקת מתקין שהורד מול סכום ביקורת שפורסם, אישור מיקוד תוסף שרד את הנסיעה לשרת העדכונים שלך, אימות dump מסד נתונים שהועתק ללא פגע בין מכונות הקובץ לעולם לא מועלה לשום מקום; it's נקרא באופן מקומי על ידי הדפדפן שלך ו-hashed במקום. I' גיבוב של מספר מאות מגה-בייט SQL dump בדרך זו. It's מהר יותר ממה שאתה ' היה מצפה, מכיוון שהרמה הכבדה מתרחשת בקוד דפדפן מקורי, לא בלולאות JavaScript.
חישוב מיידי בצד הלקוח באמצעות קריפטו אינטרנט
תקצירי משפחת SHA מחושבים עם הדפדפן 's מובנה Web Crypto API - crypto.subtle.digest- אשר מריץ מקורי, קוד הצפנה אופטימלי נשלח עם הדפדפן שלך אין שרת הלוך ושוב, אין תור, אין ספינר אתה מקבל תוצאות מהר ככל שהמכונה שלך יכולה לקרוא את הקלט זה משנה משתי סיבות ראשית, מהירות: hashing קורה באלפיות שניות, אפילו עבור כניסות גדולות שנית, אמון: בגלל החישוב הוא מקומי, הכלי עובד אותו הדבר בין אם אתה & #39; נמצאים באינטרנט בבית קפה או hashing תצורה רגישה ברשת נעולה הדף נטען פעם אחת; לאחר מכן, הרשת אינה רלוונטית.
פלט רישיות וקטנות
תכונה טריוויאלית, חוסכת כאבי ראש אמיתיים עיכולי משושה הם חסרי רגישות רישיות במשמעות - 2CF24DBA ו 2cf24dba קידוד בתים זהים - אבל השוואות מחרוזות don' לא יודע את זה. שפע של מערכות מאחסנות או מפרסמות תקצירים באותיות רישיות (חלק מכלי Windows, דפי סכום בדיקה מסוימים של ספקים), בעוד שרוב כלי Unix פולטים אותיות קטנות. אם אתה ' אתה מדביק תקציר בסקריפט השוואה או קובץ תצורה שעושה התאמת מחרוזות מדויקת, המקרה פתאום חשוב מאוד. ההחלפה פירושה שאתה מעתיק את הפורמט שאתה צריך במקום להריץ את הפלט דרך ממיר רישיות או, גרוע מכך, " תיקון" זה ביד ובאצבעות שומן של תו.
השווה ואמת מצב
Hashing הוא רק חצי מהעבודה - בדרך כלל אתה're בודק תקציר מול ערך צפוי. הדבק את סכום הבדיקה שפורסם ליד הסכום המחושב שלך והכלי אומר לך באופן מיידי אם הם תואמים, אין צורך בפזילה ב-64 תווים משושה. נהגתי לאמת סכומי בדיקה על ידי השוואה ויזואלית של התווים הראשונים והאחרונים. That's בדיוק איך אתה מתגעגע לחוסר התאמה באמצע. עיניים אנושיות נוראיות בהשוואה בין מחרוזות אקראיות ארוכות; that' הוא עבודה לבדיקת שוויון. מצב האימות גם מנרמל את המארז ומקצץ את הרווח הלבן לפני ההשוואה, מה שהורג את אזעקת השווא הנפוצה ביותר: רווח נגרר תועה מהדבקת העתקה מרושלת.
100% פרטי - שום דבר לא עוזב את הדפדפן שלך
זוהי התכונה שאני מסרב להתפשר על פני כל Toolz.dev הקלט שלך - טקסט או קובץ - הוא hashed מקומי ומעולם לא מועבר.There's אין עיבוד בצד השרת, אין רישום, אין "אנחנו אנונימיים הנתונים " שלך; אותיות קטנות, כי there's אין נתונים כדי log.זה משנה יותר עבור hashing מאשר אנשים מבינים: הדברים מפתחים hash הם לעתים קרובות בדיוק הדברים שהם צריכים & #39;t להדביק לתוך אתר אקראי - סודות API בזמן ניפוי באגים HMAC חתימות, מפתחות רישיון, dump עם הודעות דואל של לקוחות עם כלי בצד הלקוח, כי הסיכון מתאדה. פתח את הדפדפן שלך 's לשונית רשת תוך גיבוב אם אתה רוצה הוכחה. כתבתי יותר על למה הארכיטקטורה הזו חשובה אצלי פרטיות נתונים וכלים מקוונים פוסט.
כיצד להשתמש במחולל Hash
שלב 1: פתח את הכלי ובחר את הקלט שלך
ראש אל ה מְחוּגָה. You'll לראות אזור קלט שמקבל או טקסט מוקלד/מודבק או קובץ. לטקסט, פשוט להתחיל להקליד - hashing קורה תוך כדי תנועה. עבור קבצים, גרור אחד לאזור הירידה או השתמש בבוחר הקבצים. שום דבר לא מעלה; הקובץ נקרא באופן מקומי על ידי הדפדפן שלך. There's אין תקרת גודל מעבר למה שהמכונה שלך 's הזיכרון נוח איתו.
שלב 2: קרא את התקצירים
כל האלגוריתמים מחשבים בבת אחת: MD5, SHA-1, SHA-256, SHA-512. כל תקציר מופיע בשורה המסומנת שלו, ב-hex. שימו לב לאורכים - 32 תווים עבור MD5, 40 עבור SHA-1, 64 עבור SHA-256, 128 עבור SHA-512. אם אתה ' מתאימים לסכום בדיקה ידוע ואתה #39; לא בטוח איזה אלגוריתם ייצר אותו, האורך לבדו אומר לך בדרך כלל לפני שאתה משווה תו בודד.
שלב 3: החלף מקרה במידת הצורך
אם המערכת you're תואמת נגד משתמשת ב-hex רישיות, הפוך את החלפת המארז. בתי העיכול זהים בכל מקרה - מדובר אך ורק בעיצוב מחרוזת. קל מאוד לבחור חלקית את התקציר עם כפתור ההעתקה במקום לבחור ביד; תקציר SHA-512 בן 128 תווים, ותקציר קטום ייכשל בשקט בכל השוואה שתעשה איתו.
שלב 4: אמת נגד חשיש צפוי
Got a published checksum from a svendor's download page or a college's preplase log? Paste it into the computer field הכלי בודק אותו מול העיכול המחושב שלך ונותן לך התאמה ברורה או אי התאמה התאמה פירושה שהנתונים זהים בתים-עבור-בתים למה שיצר את ה-hash המקורי אי התאמה פירושה משהו השתנה - העברה פגומה, גרסת קובץ שגויה או שיבוש Don't רציונליזציה של אי התאמה הורדה מחדש ובדיקה שוב.
MD5 לעומת SHA-256: What's בעצם קורה מתחת למכסה המנוע
פונקציית גיבוב קריפטוגרפית לוקחת קלט בכל אורך ומייצרת פלט באורך קבוע הנקרא תקציר. ארבעה מאפיינים הופכים אותו לשימושי. זה 's דטרמיניסטי- אותו קלט תמיד מניב את אותו תקציר. זה מציג את אפקט מפולת- שנה סיביות קלט אחת וכמחצית מסיביות הפלט מתהפכות. זה 's חד כיווני- there's אין נתיב אפשרי מעיכול חזרה לקלט. וזה 's עמיד בפני התנגשות- מציאת שתי תשומות שונות המייצרות את אותו תקציר צריכה להיות בלתי אפשרית מבחינה חישובית.
אפקט המפולת שווה לראות עם ערכים אמיתיים.MD5 של hello הוא 5d41402abc4b2a76b9719d911017c592. באותיות גדולות אות אחת - Hello- ואתה מקבל 8b1a9953c4611296a827abf8c47804d7. אף דמות לא השתנתה; תקציר לגמרי לא קשור. אותו סיפור עם SHA-256: hello גיבוב ל 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824, בעוד Hello מייצר תקציר שלא חולק איתו כלום. That's the point. תקציר אומר לך אם נתונים השתנו, מעולם לא כמה.
עכשיו, האלגוריתמים. MD5 הוגדר ב-RFC 1321 עוד ב-1992 ומייצר תקציר של 128 סיביות. It's fast, it's everywhere - and it's שבור קריפטוגרפית התקפות התנגשות מעשיות קיימות מאז 2004; חוקרים יכולים לייצר שני תשומות שונות עם אותו תקציר MD5 על חומרת סחורות. זה הורג אותו עבור כל דבר יריב: חתימות, תעודות, בדיקות תקינות שבהן תוקף עשוי להחליף תוכן. זה נשאר בסדר עבור סכומי בדיקה לא יריבים - זיהוי שחיתות מקרית בהעברת קבצים, ביטול שכפול הנתונים שלך - כי שחיתות אקראית עושה זאת 't זוכה לבחור את הבתים שלו. SHA-1 (160 סיביות) נמשכה זמן רב יותר, אך התקפת SHAttered הדגימה התנגשות מעשית ב-2017, עם שני קובצי PDF שונים החולקים תקציר SHA-1 אחד. Git עדיין משתמש ב-SHA-1 באופן פנימי מסיבות היסטוריות, אבל שום מערכת חדשה לא צריכה.
ה משפחת SHA-2- SHA-256 ו-SHA-512 ביניהם - מצוין ב-FIPS 180-4 ונשאר ללא הפסקה. SHA-256 נותן לך תקציר של 256 סיביות והוא ברירת המחדל השפויה כמעט לכל דבר. SHA-512 מציע תקציר גדול יותר ולעתים קרובות הוא יותר מהר במעבדי 64 סיביות, מכיוון שהוא פועל במילים של 64 סיביות.
שלוש הבחנות שאנשים מטשטשים כל הזמן. Hashing הוא חד כיווני - אין מפתח, אין דרך חזרה. הצפנה הוא דו-כיווני - כל מי שיש לו את המפתח יכול לפענח. קִדוּד, כמו Base64, היא הגנה אפס-כיוונית - it's רק שינוי ייצוג שכל אחד יכול להפוך, אין צורך במפתח. אם אתה ' אי פעם ראית את Base64 מטופל כ-"הצפנה," לִי ממיר Base64 ידגים בעליזות מדוע זה ' מהווה בעיה, ושלי מדריך קידוד Base64 מכסה את ההבחנה לעומק.
כאשר אתה צריך להוכיח הודעה הגיעה ממישהו שמחזיק בסוד משותף - חתימות webhook, חתימת בקשת API - hash רגיל isn't מספיק, כי כל אחד יכול hash. That's HMAC, מוגדר ב-RFC 2104: קונסטרוקציית מפתח העוטפת פונקציית hash כך שרק מחזיקי מפתחות יכולים לייצר תקצירים חוקיים. HMAC-SHA256 הוא סוס העבודה מאחורי רוב סכימות החתימות של webhook you' אי פעם יאתר באגים.
והגדול: לעולם אין סיסמאות גיבוב עם גיבוב מהיר. מהיר הוא האויב כאן - תוקף עם מסד נתונים דלף יכול לבדוק מיליארדי ניחושים MD5 או SHA-256 בשנייה על GPUs.סיסמאות צריכות אלגוריתמים איטיים ומלוח בכוונה: bcrypt או Argon2. Laravel's Hash::make() משתמש ב-bcrypt כברירת מחדל בדיוק מהסיבה הזו, ו-WordPress בילתה שנים על ערכת הגיבוב הנייד phpass לפני המודרניזציה - לא מושלמת, אבל האינסטינקט (להאט אותו, להמליח אותו) היה נכון. למדתי את זה בדרך הקשה: פרויקט עצמאי מוקדם שלי, שנים לפני WP Adminify, סיסמאות מאוחסנות כגולמיות md5($password). מהלך טירון קלאסי אף אחד לא נפרץ, אבל אני עדיין מתכווץ.
Here's מה הכלי Toolz.dev עושה מתחת למכסה המנוע, ומה אתה'd לכתוב בעצמך:
const data = new TextEncoder().encode('hello');
const buf = await crypto.subtle.digest('SHA-256', data);
const hex = [...new Uint8Array(buf)]
.map(b => b.toString(16).padStart(2, '0'))
.join('');
// "2cf24dba5fb0a30e26e83b2ac5b9e29e..."
או ב-PHP, שורה אחת: hash('sha256', 'hello'). אותו קלט, אותו תקציר, כל שפה, כל מכונה. הדטרמיניזם הזה הוא כל הבסיס.
מקרי שימוש נפוצים
אימות הורדות קבצים וחפצי שחרור
מקרה השימוש ששרף אותי במבוא ספקים מפרסמים סכומי ביקורת לצד הורדות מסיבה: העברות מושחתות, מראות מתעייפות, ומדי פעם מישהו זדוני מחליף קובץ הורד את הקובץ, גיבוב עם ה מְחוּגָה, השווה מול הערך שפורסם התאמה: הקובץ זהה בתים למה שהמוציא לאור גיבוב. חוסר התאמה: עצור והורד מחדש. עבור מהדורות משלי, הכלל מאז אותו תקרית בשעה 2:40 לפנות בוקר הוא מכני - סקריפט הפריסה מחשב את SHA-256 באופן מקומי, מעלה, מביא את הקובץ המרוחק 's hash, ומסרב להפוך את " הגרסה הנוכחית" מצביע אלא אם כן הם' שווים. It's אולי שמונה שורות של bash. מאז הוא תפס שתי העלאות קטומות, שתיהן היו שיטפונות כרטיסים הביטוח הזול ביותר בכל הצינור שלי.
פריצת מטמון ותגי ET
דפדפנים מאחסנים במטמון בצורה אגרסיבית, ו-"נא לרענן ולהציטט; אינה אסטרטגיית פריסה. התיקון החזק הוא שמות קבצים מרופדים בתוכן: גיבוב של הקובץ 's תוכן והטמעת חלק מהתקציר בשם, אז app.css הופך app.2cf24dba.css. שינוי תוכן, שינויי גיבוב, שינויים בשמות קבצים, החמצות מטמון, משתמשים מקבלים את הקובץ החדש. תוכן זהה, שם קובץ זהה, להיט מטמון. Laravel Mix ו-Vite עושים זאת באופן אוטומטי; ב-WP Adminify עשיתי גרסה תוצרת בית, גיבוב תוכן נכסים כדי לבנות את ver מחרוזת שאילתה וורדפרס מתווספת לסקריפטים בתורים - אחרי אחד יותר מדי " לוח ההגדרות נראה שבור" כרטיסים שהיו ממש מעופשים CSS. אותו עיקרון מפעיל ETags: השרת מגבש את התגובה, הדפדפן שולח את ה-hash בחזרה, והתאמה פירושה 304 זעיר במקום מטען מלא.
ביטול שכפול תוכן
רוצה לדעת אם שני קבצים זהים מבלי להשוות אותם בית אחר בית - או כשהם חיים במכונות שונות? Hash שניהם. עיכול שווה פירושו תוכן שווה (עם SHA-256, סיכויי ההתנגשות כל כך קטנים באופן אבסורדי שהם ' לא שווים מחשבה). זה משתנה יפה: גיבוב אלף העלאות, מיין את העיכולים ושכפולים מתקבצים באופן מיידי. I' השתמשתי בזה כדי לבטל את הסכמתה של ספריית מדיה של וורדפרס שצברה שנים של logo.png, logo-1.png, ו logo-final-2.png- hashing חשף אילו היו למעשה אותה תמונה לובשת שמות שונים. It's גם כיצד כלי גיבוי מחליטים על מה לדלג וכיצד מאגרי אובייקטים מזהים ש-"upload" הוא תוכן שהם כבר מחזיקים.
כתובת תוכן בסגנון Git
Git does't לאחסן קבצים לפי שם - זה מאחסן אותם על ידי hash. כל כתם, עץ והתחייבות מטופלים על ידי תקציר התוכן שלו (SHA-1 היסטורית, עם מעבר SHA-256 בתהליך). That's למה מזהי commit נראים כמו hashes: הם הם hashes, והם מכסים את תמונת המצב, ההורים, המחבר, חותמת הזמן. שנה כל דבר בכל מקום בהיסטוריה וכל שינוי גיבוב במורד הזרם, וזה מה שהופך את ההתעסקות בהיסטוריה של Git לברורה בקול רם ולא אפשרית בשקט. הבנת זה שינתה את האופן שבו אני מאתר באגים בבעיות Git. כאשר שתי מכונות לא מסכימות לגבי התחייבות, השוואת גיבוב אומרת לך באופן מיידי אם אתה ' מסתכלים על אותו אובייקט או היסטוריה שונה. התייחסות לתוכן היא אחד מאותם רעיונות שנשמעים אקדמיים עד שהם חוסכים את הריפו שלך.
השוואת Configs ללא חשיפת סודות
בימוי עבודות, הפקה does't, ואתה חושד ב .env קבצים שונים - אבל אתה don' לא רוצה סודות ייצור מודבקים לתוך שרשור Slack או שיתוף מסך. Hash כל קובץ במחשב שלו והשווה תקצירים במקום זאת. hashes שונים מאשרים שהקבצים שונים מבלי לחשוף ערך אחד. אתה יכול ללכת עדין יותר: גיבוב קווים בודדים או מפתחות ספציפיים כדי לאתר אשר הערך מתפצל. I'יישב חילוקי דעות עם תמיכה באירוח בדרך זו - "העותק שלך של התצורה 't תואם לשלי, כאן's SHA-256 שלי, בדוק את שלך" מסיים את הדיון בהודעה אחת. התקציר מוכיח הבדל או זהות בעוד שהסודות נשארים בדיוק היכן שהם שייכים.
איתור באגים בחתימת Webhook
Stripe, GitHub, Paddle - כולם חותמים על מטענים של webhook, בדרך כלל עם HMAC-SHA256, כך שתוכל לאמת את הבקשה שהגיעה מהם בפועל. וכאשר האימות שלך נכשל, איתור באגים הוא אומלל, מכיוון שהכשל שקט: חתימות פשוט don't תואמות, והתוכנה האמצעית אומרת שלא. תשע פעמים מתוך עשר האשם הוא המטען - המסגרת שלך סידרה מחדש את ה-JSON, שינתה רווח לבן או סדר מפתחות, כך שאתה 're גיבוב בתים שונים ממה שנחתמו. Hashing את גלם גוף בקשה בנקודות שונות בצנרת שלך מראה לך בדיוק היכן הבייטים עוברים מוטציה. אם העיכול משתנה בין מטפל המסלול שלך לפונקציית האימות שלך, אתה ' מצאת את השכבה ש-' נוגעת בגוף. בזמן שאתה ' נמצאים בשכונה הזו, שלי מפענח JWT שימושי לעבודה הסמוכה של בדיקת אסימונים חתומים.
MD5 לעומת SHA-1 לעומת SHA-256 לעומת SHA-512: באיזה כדאי להשתמש?
| אלגוריתם | גודל תקציר | מהירות יחסית | מצב אבטחה | שימושים מתאימים |
|---|---|---|---|---|
| MD5 | 128 סיביות (32 תווים משושה) | המהיר ביותר | שבור - התנגשויות מעשיות מאז 2004 | סכומי בדיקה לא יריבות, תאימות מערכת מדור קודם, מפתחות מטמון |
| SHA-1 | 160 סיביות (40 תווים משושה) | מהיר | שבור - התנגשות מרוסקת, 2017 | פנימיות Git מדור קודם, אינטראקציה עם מערכות ישנות; שום דבר חדש |
| SHA-256 | 256 סיביות (64 תווים משושה) | מהיר | מאובטח | ברירת מחדל עבור בדיקות תקינות, חתימות, כתובת תוכן, HMAC |
| SHA-512 | 512 סיביות (128 תווים משושה) | מהיר (לעתים קרובות מהיר יותר במעבדי 64 סיביות) | מאובטח | זהה ל-SHA-256; כאשר אתה רוצה מרווח נוסף או תפוקה של 64 סיביות |
העמדה שלי, ו-I'יהיה בוטה לגבי זה: ברירת מחדל ל-SHA-256 ותפסיק לחשוב על זה. It's מאובטח, נתמך אוניברסלית, מהיר מספיק כדי שלעולם לא תבחין בעלות, וזה 's מה הכלים שלך כבר מדברים - תעודות TLS, עיכול תמונות Docker, קבצי נעילה של חבילות, חתימות webhook האנרגיה המנטלית המושקעת בבחירת אלגוריתם כמעט תמיד מושקעת טוב יותר במקום אחר.
הניואנס שכדאי לשמור: MD5 isn't רדיואקטיבי, it's סקופ. זיהוי שחיתות מקרית בקבצים שלך? בסדר גמור. כל דבר שבו יריב אנושי יכול להפיק תועלת מזיוף התנגשות? בהחלט לא. SHA-1 יושב באותו דלי עם פחות תירוצים - הסיבה הטובה היחידה לגעת בו היא תאימות למערכת שאתה עושה ' שליטה ב-SHA-512 היא בחירה מצוינת ומדי פעם מהירה יותר בחומרה מודרנית של 64 סיביות, אבל עיכולים של 128 תווים הם מסורבלים ביומנים וכתובות URL, ושולי האבטחה של SHA-256 כבר מעבר לכל התקפה מציאותית. ואף אחד מהארבעה - חזור, אף אחד - לא שייך בשום מקום ליד שדה סיסמה.
שאלות נפוצות
האם MD5 עדיין בטוח לשימוש?
לאבטחה, לא. התקפות התנגשות מעשיות קיימות מאז 2004, כלומר תוקפים יכולים ליצור שני קבצים שונים עם אותו תקציר MD5. לעולם אל תשתמש בו עבור חתימות, אישורים, אחסון סיסמאות או כל בדיקת תקינות כאשר חבלה היא דאגה. זה נשאר מקובל עבור עבודות לא יריבות - זיהוי שחיתות מקרית, ביטול שכפול קבצים משלך, יצירת מפתחות מטמון - שבהן אף אחד לא מנסה לרמות אותך. אם יש ספק, השתמש ב-SHA-256; זה לא עולה לך כלום.
האם אתה יכול להפוך גיבוב כדי לקבל את הנתונים המקוריים?
פונקציות מס' Hash הן חד-כיווניות בתכנון - התקציר מכיל הרבה פחות מידע מרוב התשומות, כך שהיפוך הוא בלתי אפשרי מבחינה מתמטית באופן כללי מה שתוקפים עושים בפועל זה לנחש: גיבוב מיליארדי תשומות מועמדות והשוואת תקצירים, באמצעות טבלאות קשת בענן או כוח גס של GPU. זה עובד בצורה מפחידה מול תשומות קצרות ונפוצות כמו סיסמאות גיבוב עם אלגוריתמים מהירים, וזו בדיוק הסיבה שסיסמאות זקוקות לגיבוב איטי ומלוח ולא MD5 או SHA-256 רגיל.
מה ההבדל בין גיבוב להצפנה?
הצפנה היא דו-כיוונית: נתונים מקושקשים עם מפתח, וכל מי שמחזיק את המפתח הימני יכול לפענח אותם בחזרה למקור. Hashing הוא חד-כיווני: אתה יכול לחשב תקציר מנתונים, אבל אתה לא יכול לשחזר את הנתונים מהתקציר - אין מפתח ואין פענוח השתמש בהצפנה כאשר אתה צריך את הנתונים בחזרה, גיבוב כאשר אתה רק צריך לאמת או להשוות.Base64, עבור הרשומה, אינו - הוא קידוד, הפיך על ידי אף אחד.
באיזה חשיש עלי להשתמש עבור סיסמאות?
אף אחד מאלה בכלי זה.MD5, SHA-1, SHA-256 ו-SHA-512 כולם מהירים, ומהיר הוא קטלני עבור סיסמאות - GPUs יכולים לבדוק מיליארדי ניחושים בשנייה מול מסד נתונים שדלף השתמש באלגוריתם איטי ומלוח בכוונה: bcrypt או Argon2. Laravel's Hash::make () משתמש ב-bcrypt כברירת מחדל, ורוב המסגרות המודרניות מספקות מקבילה. אם אתה כותב קריאות גיבוב גולמיות לאחסון סיסמאות, עצור והושיט יד ל-Framework's hashing API במקום זאת.
האם זה בטוח ל-hash נתונים רגישים בכלי מקוון?
רק אם הכלי הוא באמת בצד הלקוח. Toolz.dev Hash Generator מחשב כל תקציר בדפדפן שלך באמצעות ה-Web Crypto API - הקלט שלך לעולם לא מועבר, מתועד או מאוחסן בשרת כלשהו. אתה יכול לאשר זאת בעצמך על ידי צפייה בכרטיסיית הרשת בזמן שאתה hash. עם כלים בצד השרת אתה סומך על מפעיל לא ידוע עם כל מה שאתה מדביק, וזה סחר גרוע עבור סודות API, מפתחות או נתוני לקוחות. כאשר יש ספק, בדוק לפני שאתה מדביק.
למה לעשות "hello" ו-"Hello" לייצר גיבובים שונים לחלוטין?
זה אפקט המפולת, והוא מכוון פונקציית גיבוב טובה הופכת בערך מחצית מסיביות הפלט שלה כאשר אפילו סיבית קלט אחת משתנה, כך שכניסות דומות מייצרות עיכולים שונים בתכלית. שימוש באות אחת משנה בית בודד, אבל העיכול הופך לבלתי ניתן לזיהוי. זוהי תכונה: זה אומר שעיכולים לא חושפים דבר על כמה שתי כניסות דומות, וזה הופך כל שינוי - זעיר ככל שיהיה - לבלתי אפשרי לפספס כאשר אתה משווה גיבוב.
מה ההבדל בין SHA-256 ל-SHA-512?
שניהם שייכים למשפחת SHA-2 המצוינת ב-FIPS 180-4, ושניהם נחשבים למאובטחים.SHA-256 מייצר תקציר של 256 סיביות באמצעות פעולות של 32 סיביות; SHA-512 מייצר תקציר של 512 סיביות באמצעות פעולות של 64 סיביות, מה שלעתים קרובות הופך אותו למהיר יותר במעבדי 64 סיביות מודרניים. בפועל, SHA-256 הוא ברירת המחדל של המערכת האקולוגית והעיכולים שלו הם בחצי מהאורך, מה ששומר על יומנים וכתובות URL ניתנות לניהול. בחר SHA-512 עבור מרווח אבטחה נוסף או תפוקה של 64 סיביות; אחרת SHA-256 הוא הרבה.
מתי אני צריך HMAC במקום חשיש רגיל?
השתמש HMAC בכל פעם שאתה צריך להוכיח מי הפיק את hash, לא רק מה היה hash. תקציר רגיל יכול להיות מחושב על ידי כל אחד, אז זה מאמת שלמות אבל לא מקור. HMAC, המוגדר RFC 2104, מערבב מפתח סודי לתוך תהליך הגיבוב - רק צדדים המחזיקים את המפתח יכולים לייצר או לאמת חתימות תקפות זהו המנגנון מאחורי חתימות webhook מ Stripe, GitHub, ושירותים דומים, כמעט תמיד כמו HMAC-SHA256 על גוף הבקשה הגולמית.
משלוח עם טביעות אצבע, לא אמונה
Hashing הוא הכלי הנדיר ש' הוא גם מדעי המחשב העמוקים וגם תרגול יומיומי פשוט-מת. אתה עושה ' לא צריך להבין את הקונסטרוקציות של Merkle–Damgård כדי להפיק תועלת מזה - אתה צריך את ההרגל. Hash חפצי השחרור שלך. ודא את ההורדות שלך. השווה תקצירים במקום קבצי גלגלי עיניים. כל אחד מההרגלים האלה הוא שלושים שניות של עבודה, וכל אחד מהם, בשלב מסוים, הציל אותי לילה שאחרת הייתי מבלה בהתנצלות בתור תמיכה.
ה Toolz.dev Hash Generator בנוי כדי להפוך את ההרגל הזה ללא חיכוך: ארבעה אלגוריתמים בו-זמנית, טקסט וקבצים, מצב אימות, כולם מחושבים בדפדפן שלך בלי שום דבר שהועלה. אם אתה 'עובדים דרך המושגים השכנים, ה ממיר Base64 מכסה קידוד (ולמה זה 't אבטחה), ה מחולל סיסמא מטפל בסודות שאתה אף פעם לא צריך להיות hashing עם SHA-256, ואת מפענח JWT מסיים את הצד החתום של הסיפור.
לתמונה הגדולה יותר, שלי מדריך כלי קידוד עובר דרך שאר ארגז הכלים למפתחים, ו פרטיות נתונים בכלים מקוונים מסביר מדוע עיבוד בצד הלקוח הוא הגבעה I' בחר למות על. Hash ראשון, לפרוס שני. העצמי שלך ב-2:40 בבוקר יודה לך.



