- PCMagazine - http://www.pcmagazine.co.il -

שאלה למתכנתים שכאן ולמי שאולי יש לו את הידע בכללי

נכתב ע''י ידיעות חוץ בתאריך 28 בנובמבר 2007 @ 7:13 בקטגוריה קבוצות דיון | אין תגובות

שאלה למתכנתים שכאן ולמי שאולי יש לו את הידע בכללי


מאת: גיא כ
נכתב ב: 20/07/2008 20:28:11
אני רוצה לכתוב תוכנה (אני סטודאנט להנדסת תוכנה סיימתי שנה א' עכשיו, אז לכן אני יודע קצת לתכנת :) )שבגדול בודקת אם הסיסמה שלי נכונה או לא.
עכשיו הבעיה שלי היא להבין איך התוכנה בכלל יודעת למה להשוות את מה שאני רושם? כלומר מאיפה המידע לנכונות הסיסמא והשם משתמש שהכנסתי?
בתודה מראש גיא.


 
20/07/2008 21:24:12

הערה מאת: imper s

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

 
20/07/2008 23:08:47

הערה מאת: גיא כ

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

 
20/07/2008 23:56:47

הערה מאת: Maor D

יש לך כמה דרכים לעשות את זה .
קודם כל כמו שאמרו כאן, אתה יכו ללעשות DB, ב DB תיהיה לך טבלה עם 2 תאים:
1. שם משתמש
2. סיסמא
כשאשר משתמש הזין שם משתמש וסיסמא כל מה שאתה עושה הוא להשאוות את המשתנה שמחזי את השם משתמש עם הרשומה בתא של השם. כנ"ל לגביב הסיסמא.
דרך אחרת היא ללא DB, אתה יכול ליצור קובץ TXT או כל קובץ אחר שתרצה (וכמובן להצפין אותו), לשים את זה בתיקייה מוסתרת במחשב של הבן אדם לדוגמא APPLICATION DATA וכאשר מזינים שם משתמש וסיסמא – התוכנה שלך בודקת מול הקובץ אם שם המשתמש או הסיסמא נכונים.
אין צורך לבדוק תו תו, בקובץ אתה יכול לקבל "שורה שלה" מתוך הקובץ לתוך משתנה STRING ופשוט להשוות מחרוזות ע"י פונקציות השאווה(בכל שפה זה שונה, אני לא יודע איזה שפות אתה יודע).
כמובן שיש עוד שיטות ..
בהצלחה.

 
21/07/2008 00:29:46

הערה מאת: פבל פ

בדרך כלל שומרים שמות משתמש ו-HASH עבור ססמאות בבסיסי נתונים. לא שומרים את הססמא עצמה אלא HASH שלה (ר' SHA-256 ואח') – אשר מאפשר לבדוק את נכונות הססמא מבלי לדעת אותה (וזאת ע"מ למנוע מקרים של גניבת ססמאות). גיא – בהיותך סטודנט להנדסת תוכנה אני מסתמך על ההשערה כי ידוע לך מהו HASH.
"אין צורך לבדוק תו תו, בקובץ אתה יכול לקבל "שורה שלה" מתוך הקובץ לתוך משתנה STRING ופשוט להשוות מחרוזות ע"י פונקציות השאווה(בכל שפה זה שונה, אני לא יודע איזה שפות אתה יודע)."
:: לעולם, אבל לעולם לא שומרים ססמאות ב-PLAIN TEXT.

"ועוד שאלה היא האם אני יכול להשתמש במילון כמו ב Brute Force שישמש אותי כ DB?"
:: במידה ואתה מדבר על DICTIONARY ATTACK, זוהי אכן טכניקה לתקוף ססמאות חלשות ע"י יצירת HASH VALUE למילים נפוצות במילון האנגלי ואח' ואז השוואת ה-HASH VALUE זה עם אלה שבבסיס הנתונים – במידה ויש התאמה, הרי לך ססמא תקפה. ניתן להשתמש ב-SALT ע"מ להתגונן, כלומר שילוב בין אותיות למספרים, כגון: PAVEL01 – במקרה כזה, מילון אינו יעיל.

 
21/07/2008 01:58:48

הערה מאת: Maor D

"לעולם, אבל לעולם לא שומרים ססמאות ב-PLAIN TEXT."
חבל שאתה לא מצטט את מה שאמרתי כמו שצריך ..
"אתה יכול ליצור קובץ TXT או כל קובץ אחר שתרצה (וכמובן להצפין אותו)."
כל העניין הוא להצפין את הקובץ .. ממש לא התכוונתי שתשמור אותו כ TXT.

 
21/07/2008 12:27:57

הערה מאת: imper s

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

 
21/07/2008 17:27:36

הערה מאת: פבל פ

ססמאות לא מצפינים, שכן ההצפנה היא הפיכה (כלומר, יש חובה להחזיק את מפתח הפענוח על השרת, אותו ניתן לגנוב). פונקציות HASH, מצד שני, הן חד-כיווניות. אין צורך בהצפנה/פענוח. הן משמשות, אם תרצה, כמעין סוג של "חתימה דיגיטלית", המאפשרת זיהוי שגיאות, או יותר מדויק, אימות שלמותו של מקבץ נתונים בגודל X באמצעות חתימה בגודל קבוע (SHA-256 מהווה HASH באורך 256BIT/32 BYTES). האם אי-פעם נתקלת בשגיאות CRC (כלומר "CRC ERRORs") בעת שניסית לפרוס קובץ RAR? – כך בדיוק זה עובד, RAR שומר חתימה של הקובץ המקורי, ואז משווה – במידה וישנו שוני, הרי שהקובץ פגום (יודגש ש-RAR משתמש באלגוריתם CRC32 אשר אינו נחשב מאובטח – כך שאין להשתמש בו ע"מ לאחסן HASH VALUES של ססמאות; אולם למטרות בדיקת שלמות, CRC מספיק).
אם התעוררה אצל מישהו מכם השאלה האם ניתן, במקרה זה, למפות שתי ססמאות שונות לאותו ה-HASH VALUE – תיאורטית, בהחלט כן. חוזקה של פונקצית HASH נמדד, בין השאר, במונחים של COLLISION RESISTANCE, כלומר, קשיחות ה-HASH FUNCTION בכל הקשור למציאת שני PRE-IMAGES (כלומר, טקסטים) אשר מפיקים את אותו ה-HASH VALUE. לדוגמא, נכון לעכשיו, ב-SHA-256 לא נמצאו התנגשויות. לעומת זאת – ב-SHA-1 ישנה טכניקה למציאת התנגשות ב-63^2 פעולות גיבוב (עדיין מחוץ להישג יד הכלל).

 
21/07/2008 21:57:45

הערה מאת: גיא כ

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

 
21/07/2008 21:59:13

הערה מאת: גיא כ

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

 
21/07/2008 22:28:26

הערה מאת: פבל פ

עצים שחורים אדומים? לא כ"כ, במקרה זה. אגב, קל מאד לממש מודל שכזה ב-C# (חצי שעת עבודה).

 
23/07/2008 11:53:10

הערה מאת: גיא כ

אני לא יודע (עדין) C#.
משהו יודע (אני מניח שאתה פבל) מהי הפקודה שאיתה אני פונה ל DB כדי להוציא נתונים?
זה יהיה כמו לפנות לקובץ טקסט ולהוציא ממנו מחרוזות?

 
23/07/2008 16:15:54

הערה מאת: פבל פ

קודם כל צריך ליצור התקשרות ל-DB. באיזה DB מדובר? MS SQL SERVER? כעקרון, בצורה הכי בסיסית:
SELECT x FROM y WHERE condition
x = שם העמודות.
y = שם הטבלה.
condition = תנאי.
זה מאד אבסטרקטי ועל רגל אחת. צריך לדעת בדיוק מה אתה מנסה לעשות. למידע נוסף: http://www.w3schools.com/sql/default.asp

 
24/07/2008 11:37:17

הערה מאת: גיא כ

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

הכתבה הודפסה מאתר PCMagazine: http://www.pcmagazine.co.il

קישור לכתבה: http://www.pcmagazine.co.il/community/pid=4727&name=%d7%a9%d7%90%d7%9c%d7%94-%d7%9c%d7%9e%d7%aa%d7%9b%d7%a0%d7%aa%d7%99%d7%9d-%d7%a9%d7%9b%d7%90%d7%9f-%d7%95%d7%9c%d7%9e%d7%99-%d7%a9%d7%90%d7%95%d7%9c%d7%99-%d7%99%d7%a9-%d7%9c%d7%95

Copyright © PCMagazine. All rights reserved