System.Security.Cryptography

SpecialNight

New member
System.Security.Cryptography

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

SpecialNight

New member
../images/Emo105.gif../images/Emo105.gif

 

adam222

New member
ת'אמת DES לא משהו

לעומת rc2 או מתקדמים יותר. הנה מצגת מעולה (מה-Tech-ED האחרון)
 

adam222

New member
כמו כן היא מכילה

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

pagis

New member
הצפנה סימטרית ב .NET

קודם כל DES הוא באמת לא האלגוריתם המומלץ. אני הייתי ממליץ על Rijndael קודם כל זה אלגוריתם חזק הרבה יותר וחוץ מזה הוא לא תלוי ב win32CryptoAPI מה שבעיני הוא ייתרון בעקבות כל הגילויים שהיו על מפתחות ג'נרים. אבל בלי אידיאולוגיה זה המפתח החזק ביותר הזמין היום כחלק מה Cryptography namespace. הדרך הכי נוחה לעבודה היא עם אובייקט CryptoStream הנה דוגמת קוד פשוטה מאוד לשימוש בו, אני אשמח לתת לך דוגמת קוד מתוחכמת יותר אם תגיד לי למה אתה משתמש בזה (מה אתה מצפין ומה את עושה עם זה, מעביר ברשת, שומר לקובץ או ל DB וכו')
string data = "very very secret stuff"; RijndaelManaged crypt = new RijndaelManaged(); MemoryStream ms = new MemoryStream(); CryptoStream csWriter = new CryptoStream(ms,crypt.CreateEncryptor(),CryptoStreamMode.Write); StreamWriter sw = new StreamWriter(csWriter); sw.WriteLine(data); sw.Flush(); csWriter.FlushFinalBlock();​
זהו, עכשיו המידע שלך מוצפן בתוך ה memoryStream ואתה יכל לעשות איתו מה שאתה רוצה, להעביר לאובייקט אחר (בד"כ ווקטור חד ממדי של bytes) או לשלוח דרך רשת או לשמור לקובץ או כל דבר. השימוש ב streams הוא מאוד נוח ומאפשר לך להצפין דברים די בקלות ובלי לדאוג לכל האלמנטים הטכנים של הצפנה (כמו חלוקת המידע לblocks לפי ה block size של אובייקט ההצפנה שלך) וזה אחת הייתרונות היפים שיש במודל ההצפנה של דוט נט. אבל הוא זמין רק בהצפנה סימטרית. פענוח של המידע המוצפן אתה עושה כמעט אותו הדבר:
string Decrypt(byte[] myKey, byte[] myIV,MemoryStream data) { RijndaelManaged crypt = new RijndaelManaged(); crypt.Key = myKey; crypt.IV = myIV; data.Position = 0; CryptoStream csReader = new CryptoStream(data,crypt.CreateEncryptor(),CryptoStreamMode.Read); StreamReader sr = new StreamReader(csReader); return sr.ReadToEnd(); }​
אני מקווה שזה עזר.
 

SpecialNight

New member
תודה רבה!

אחלה הודעה,כל הכבוד על ההשקעה
אני רק לא מבין...בפונקציה של ה Decrypt, מה אני אמור לרשום ב myKey וב myIV...
 

pagis

New member
את מפתח ההצפנה והווקטור

אותם אתה יכל לקבל מה properties של המפתח שיצרת בשלב הראשון (של ההצפנה) כי בהצפנה סימטרית אתה הרי משתמש באותו מפתח גם להצפנה וגם לפיענוח.
RijndaelManaged crypt = new RijndaelManaged(); byte[] myKey = crypt.Key; byte[] myIV = crypt.IV;​
את המפתח הסימטרי אתה יכל להצפין בהצפנה א-סימטרית ואז לשלוח אותו דרך האינטרנט או לצרף אתו לקובץ או מש שאתה רוצה ואז רק מי שיש לו את המפתח הפרטי יוכל לפענח את ההצפנה ה א-סימטרית, לגלות מה המפתח הסימטרי ולפענח את ההצפנה הסימטרית. זה מה שנהוג לעשות גם בגלל שהצפנה סימטרית הרבה יותר חזקה, גם בגלל שהיא הרבה יותר מהירה וגם בגלל שהיא שומרת את נפח המידע המוצפן הרבה יותר קטן, לכן לא מצפינים בצורה א-סימטרית את כל המידע אף פעם, זה הרבה פחות מאובטח. מצפינים סימטרית ורק את המפתח מצפינים א-סימטרית. אני שמח שעזרתי. אני לא יודע למה אתה משתמש בזה, אבל כך בחשבון שהצפנה בפרט ו data security בכלל הם תחומים מורכבים יחסית וקל מאוד לעשות טעות קטנה שתאפשר לכל איש מקצוע לשבור את ההגנות שלך ואתה לעולם לא תדע על זה. כך שאם אתה מצפין משהו לאפל' מסחרית או לאפל' שאבטחת המידע היא גורם קריטי, הייתי נותן למישהו שמתמחה בזה לעבור על הקוד.
 

SpecialNight

New member
למעשה המטרה שלי...

המטרה היא לאבטח את העוגיות ואת הנתונים ב DB.
 

pagis

New member
אבטחת DB

היא נושא מורכב ויש לו כמה רבדים. איזה נתונים אתה רוצה להצפין ב DB ? אני מניח שלא את כולם. ומפני מה אתה מגן עליהם? מפני פריצה לתוך הרשת שלך? השאלה היא באיזה מפתח אתה משתמש ואיך אתה מנהל את המפתחות שלך. ניהול מפתחות הוא נושא מורכב לא פחות ויש 1001 דרכים לנהל מפתחות...
 

SpecialNight

New member
עוד לא התחלתי האמת...

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