עזרה בc#
-
תראה, השגיאה כתובה בעברית בצורה ברורה לגמרי.
יש פתרון פשוט לבעיה ע"י שתקטין את הערך עם שארית, כלומר כשאתה מכפיל את המיקום הנוכחי בערך הנוכחי שיוצר מספר גדול, תעטוף את זה במודולו:(textChars[i] * i) % 1114111
אבל לפני שאני נכנס לפרטים, תן רקע למה משמשת מתודת ההצפנה הזו ומאיפה הייתה לך ההשראה לאופן הביצוע?
כי אני מאוד מקוה שזה שיעורי בית ולא לתועלת מעשית, שמקרה זה עדיף מאוד להשתמש בכלים מוכנים.פורסם במקור בפורום CODE613 ב18/12/2017 12:09 (+02:00)
-
עכשיו כתבתי קוד כזה:
public string Crypt(string text) { string result = ""; char[] textChars = text.ToCharArray(); for (int i = 0; i < textChars.Length; i++) { if (textChars[i] * i < '\uffff') { result += Convert.ToChar(textChars[i] * i); } else { if (char.MaxValue - textChars[i] * i + 1 >= char.MinValue) { result += Convert.ToChar((textChars[i] * i) % 1114111); } else { if ((char.MaxValue - (textChars[i] * i) % 1114111) < 0) { result += Convert.ToChar((char.MaxValue - (textChars[i] * i) % 1114111) * -1); } } } } return result; }
אבל עכשיו הוא נתקע בתו ה88 כי זה יצא 66183 בתור המספר של התו... יש אפשרות שהוא יעשה בדיקה ויסדר עד שזה יצא תו קיים?
פורסם במקור בפורום CODE613 ב18/12/2017 12:36 (+02:00)
-
@דוד ל.ט.
אבל לפני שאני נכנס לפרטים, תן רקע למה משמשת מתודת ההצפנה הזו ומאיפה הייתה לך ההשראה לאופן הביצוע?
כי אני מאוד מקוה שזה שיעורי בית ולא לתועלת מעשית, שמקרה זה עדיף מאוד להשתמש בכלים מוכנים.פורסם במקור בפורום CODE613 ב18/12/2017 12:38 (+02:00)
-
@דוד ל.ט.
אבל לפני שאני נכנס לפרטים, תן רקע למה משמשת מתודת ההצפנה הזו ומאיפה הייתה לך ההשראה לאופן הביצוע?
כי אני מאוד מקוה שזה שיעורי בית ולא לתועלת מעשית, שמקרה זה עדיף מאוד להשתמש בכלים מוכנים.זה שיעורי בית. היא משמשת לתירגול.
פורסם במקור בפורום CODE613 ב18/12/2017 12:40 (+02:00)
-
אז גם MD5 זו הריסה ואין איך לשמור סיסמאות באתרים, כי אם יפרצו למסד נתונים ימצאו הכל...
למה גוגל לא אומרים לך מה הסיסמא שלך בשיחזור סיסמא אם עברת את הכל כהלכה? כי הם לא יודעים! אתה כותב סיסמא והם מצפינים אותה ובודקים אם התוצאה זהה לסיסמא המוצפנת.פורסם במקור בפורום CODE613 ב18/12/2017 13:07 (+02:00)
-
הבנתי, אתה מתכוון לגיבוב.
אוקי אז אתן לך דרך שתעבוד:string result = ""; char[] textChars = text.ToCharArray(); for (int i = 0; i < textChars.Length; i++) { var curr = (textChars[i] * i) % 0x10ffff; while (curr >= 0x00d800 && curr <= 0x00dfff) curr = (curr * i) % 0x10ffff; result += char.ConvertFromUtf32(curr); } return result;
יש כמה דברים לייעל פה, אבל בשיעורי בית אני לא נוגע.
פורסם במקור בפורום CODE613 ב18/12/2017 13:29 (+02:00)
-
הופה אתה צודק, לא רק ממחשב למחשב אלא גם מפרימוורק לאחר:
https://msdn.microsoft.com/en-us/library/system.string.gethashcode(v=vs.110).aspx?f=255&MSPPError=-2147217396The behavior of GetHashCode is dependent on its implementation, which might change from one version of the common language runtime to another. A reason why this might happen is to improve the performance of GetHashCode.
פורסם במקור בפורום CODE613 ב18/12/2017 14:43 (+02:00)
-
אז גם MD5 זו הריסה ואין איך לשמור סיסמאות באתרים, כי אם יפרצו למסד נתונים ימצאו הכל...
למה גוגל לא אומרים לך מה הסיסמא שלך בשיחזור סיסמא אם עברת את הכל כהלכה? כי הם לא יודעים! אתה כותב סיסמא והם מצפינים אותה ובודקים אם התוצאה זהה לסיסמא המוצפנת.למעשה הקוד שלך לא מוגן מפני התקיפות שהזכרת.
אם מישהו יפרוץ למסד שאיחסן סיסמאות עם הפוקנציה שהבאת, הוא יידע הכל לכאורה.
הוא צריך לקחת את התו, ואת מיקומו, והנה לך משוואה קלה.
גם אם תסבן אותו עם כמה סיבובים על כל תו, עדיין הוא יידע את א. אורך הסיסמאות, ב. הוא ימצא סיסמאות זהות ג. הוא יצליב בין קלט של סיסמאות של עצמו לפלט ועוד.פורסם במקור בפורום CODE613 ב18/12/2017 23:51 (+02:00)