חתימת אסמבלי
מקווה שבעל הידע יוכל לענות, תודה מראש ! להבנתי מטרת הנושא הוא לפתור את בעיית ה DLL Hell. קראתי מספר מאמרים בנושא (בעיקר מה MSDN) ומסתבר שדברים בסיסים אינם מובנים לי (חוזרים על עצמם בלכ המאמרים...), לכן אשמח אם תוכלו להבהיר לי אותם : 1. כדי לחתום אסמבלי, אני צייך לייצר מפתח, ואני עושה זאת ע"י sn -k aaa נוצר לי קובץ aaa וע"י sn -tp aaa אני יכול לראות את תוכנו. הוא מכיר את המפתח (שדרה ארוכה מאוד מאוד של תווים), ובסופו מחזורת נוספת קצרה, שנקראת Token. מה זה ה Token הזה בדיוק ? הרצה של אלגוריתם מסויים על המחרוזת הארוכה וקבלת מחזורת "קומפקטית יותר" ? מה מטרתה ? האם רק לטובת נוחות ? 2. על סמך מה נוצר קובץ ה aaa ? מה מונע מאדם אחר, במקום אחר, ליצור במקרה אותו מפתח כמו שלי ? 3. אני רואה בקובץ רק מפתח אחד, היכן נכנס אלמנטי המפתח הפרטי והציבורי ? (או שזה לא רלוונטי, ורק מפתח אחד משמש לחתימת האסמבלי ?) 4. מה בכלל משמעות החתימה ? האם זה רק לטובת זיהוי חד חד ערכי של האסמבלי וגירסתו, או גם לטובת אבטחה (אולי אי אפשר לראות את הקוד של אסמבלי חתום / לערוך בו שינויים ?) 5. המזהה החד חד ערכי של אסמבלי ב GAC הוא : שם האסמבלי, גירסא, Culture ומפתח ה Token. לשם מה צריך את כל הארבעה ? הרי ה Token עצמו הוא כבר מזהה חד חד ערכי, לא ? 6. נניח ויש לי 2 גרסאות שונות חתומות ב GAC (של אותו DLL), ומתוך קוד #C שלי אני רוצה להפעיל פונקציה מתוך אחד ספציפי - כיצד אני עושה זאת ? (ניסיתי לבצע Add Reference ל DLL הזה, אבל כשאני עושה Add Reference ואז Browse ומנווט לתיקיית ה GAC, אי אפשר לבחור משם כלום...) 7. הבנתי שכדי לחתום אסמבלי מסויים, כל מה שאני צריך לעשות הוא לכתוב בתוכו את השורה הרלוונטית [assembly:AssemblyKyFile("aaa")] היכן אני כותב את זה ? והאם זה אכן כל מה שצריך ? 8. ושאלה לקינוח מה בדיוק קורה מה בדיוק מוצפן כש CLR חותם את האסמבלי ? מקווה שלא נרדמתם...
מקווה שבעל הידע יוכל לענות, תודה מראש ! להבנתי מטרת הנושא הוא לפתור את בעיית ה DLL Hell. קראתי מספר מאמרים בנושא (בעיקר מה MSDN) ומסתבר שדברים בסיסים אינם מובנים לי (חוזרים על עצמם בלכ המאמרים...), לכן אשמח אם תוכלו להבהיר לי אותם : 1. כדי לחתום אסמבלי, אני צייך לייצר מפתח, ואני עושה זאת ע"י sn -k aaa נוצר לי קובץ aaa וע"י sn -tp aaa אני יכול לראות את תוכנו. הוא מכיר את המפתח (שדרה ארוכה מאוד מאוד של תווים), ובסופו מחזורת נוספת קצרה, שנקראת Token. מה זה ה Token הזה בדיוק ? הרצה של אלגוריתם מסויים על המחרוזת הארוכה וקבלת מחזורת "קומפקטית יותר" ? מה מטרתה ? האם רק לטובת נוחות ? 2. על סמך מה נוצר קובץ ה aaa ? מה מונע מאדם אחר, במקום אחר, ליצור במקרה אותו מפתח כמו שלי ? 3. אני רואה בקובץ רק מפתח אחד, היכן נכנס אלמנטי המפתח הפרטי והציבורי ? (או שזה לא רלוונטי, ורק מפתח אחד משמש לחתימת האסמבלי ?) 4. מה בכלל משמעות החתימה ? האם זה רק לטובת זיהוי חד חד ערכי של האסמבלי וגירסתו, או גם לטובת אבטחה (אולי אי אפשר לראות את הקוד של אסמבלי חתום / לערוך בו שינויים ?) 5. המזהה החד חד ערכי של אסמבלי ב GAC הוא : שם האסמבלי, גירסא, Culture ומפתח ה Token. לשם מה צריך את כל הארבעה ? הרי ה Token עצמו הוא כבר מזהה חד חד ערכי, לא ? 6. נניח ויש לי 2 גרסאות שונות חתומות ב GAC (של אותו DLL), ומתוך קוד #C שלי אני רוצה להפעיל פונקציה מתוך אחד ספציפי - כיצד אני עושה זאת ? (ניסיתי לבצע Add Reference ל DLL הזה, אבל כשאני עושה Add Reference ואז Browse ומנווט לתיקיית ה GAC, אי אפשר לבחור משם כלום...) 7. הבנתי שכדי לחתום אסמבלי מסויים, כל מה שאני צריך לעשות הוא לכתוב בתוכו את השורה הרלוונטית [assembly:AssemblyKyFile("aaa")] היכן אני כותב את זה ? והאם זה אכן כל מה שצריך ? 8. ושאלה לקינוח מה בדיוק קורה מה בדיוק מוצפן כש CLR חותם את האסמבלי ? מקווה שלא נרדמתם...