דווקא ב .NET זה ממש פשוט
אם אתה רוצה הצפנה, ולא רק (או לא בכלל) אבטחת כניסה, אתה פשוט יוצר איזה שרות שמקשר לשרת ה SQL ויושב על השרת (נאמר שאתה ניגש לשרת דרך איזשהו web service). הפניה הראשונית לשרת תעשה לאיזשהי פונקציה שתפקידה להחליף מפתחות הצפנה ולהתחיל את ההצפנה, נקרא לה handShake. הפונקציה הזו בעצם לא מקבלת כלום אבל היא מחזירה את מפתח ההצפנה שבעזרתו תצפין דברים שיישלחו לשרת. באובייקט שבתוכו יושבת handShake, והוא בעצם האובייקט המתווך בין ה Service ללקוח יהיה לך instance מסוג RSACryptoServiceProvider. כשתתבצע פניה ל handShake היא תחזיר string שיכיל את המפתח RSACryptoServiceProvider.ToXmlString הלקוח מצדו יוצר אובייקט RSACryptoServiceProvider, מיבא את המפתח שהוא מקבל מ handShake (RSACryptoServiceProvider.FromXmlString) ומעכשיו אתה יכל להצפין כל דבר שהלקוח שולח לשרת ע"י RSACryptoServiceProvider.Encrypt ולפענח ע"י RSACryptoServiceProvider.Decrypt. חשוב לזכור שאפשר להצפין (ולפענח) רק מערכים חד ממדים מסוג byte, כך שאתה פשוט צריך להמיר כל אובייקט שלך ל byte ולהכניס למערך, כאשר תמיד אתה יכל לעשות את זה דרך string כאובייקט מתווך. חוץ מזה, כדי שלא יהיה מיש-מש חשוב להקפיד על הפרדה של האובייקטים. תצפין ותשלח בכל פעם מערך אחד שמכיל משהו ברור, כך שלא יהיה מצד שבצד המקבל תתקשה לצקת את המידע המפוענח לתוך אובייקט מסוג מסויים. אני מצרף דוגמת קוד ב #C: הקוד בצד הלקוח יראה כך:
string RSAKey = mySQLservice.handShake(); System.Security.Cryptography.RSACryptoServiceProvider Lock = new System.Security.Cryptography.RSACryptoServiceProvider(); Lock.FromXmlString(RSAKey); byte[] SQLinfo = System.Text.Encoding.UTF8.GetBytes("stuff from your SQL DB in string form"); SQLinfo = Lock.Encrypt(SQLinfo,false);
הקוד בצד השרת יראה כך:
public class DBmiddleman : System.Web.Services.WebService { private static RSACryptoServiceProvider serverLock = new RSACryptoServiceProvider(); public string handShake() { return serverLock.ToXmlString(false); } }
החלפת המפתחות תעבוד בדיוק באותה הצורה גם בכיוון השני. כמובן שבמחלקה האמיתית יהיו גם האלמנטים שמאפשרים את כל התקשורת מול שרת ה SQL ואת כל שאר הפונקציות שיתקשרו בין הלקוח ל service אבל עכשיו כבר החלפת מפתחות הצפנה ואתה יודע איך להצפין ולפענח את המידע כך שתוכל לבצע את כל התקשורת שלך בצורה מאובטחת (אפילו שם משתמש וסיסמא אתה יכל להצפין כך שבעצם התקשורת היחידה שתעבור לא מוצפנת היא המפתחות הציבוריים). וואו! זה יצא ארוך הרבה יותר ממה שתכננתי (וגם לקח הרבה זמן, כנראה שנסחפתי) אני מקווה לפחות שזה עוזר.