رمزنگاری Web.Config
چهارشنبه 18 دی 1392همانطور که اطلاع دارید اطلاعات مهم در برنامه های ما در Web.Config ذخیره میشوند<br /><br />مانند رشته اتصال بانک ،ایمیل و کلمه عبور،اطلاعات پنل اس ام اس و ...<br />در این مقاله نحوه رمزنگاری اطلاعات داخل Web.Config را بررسی خواهیم کرد

سلام
همانطور که اطلاع دارید اطلاعات مهم در برنامه های ما در Web.Config ذخیره میشوند
مانند رشته اتصال بانک
ایمیل و کلمه عبور
اطلاعات پنل اس ام اس
و ...
خب در مرحله در Web.Config و در قسمت AppSetting یک مقدار درج میکنیم برای تست
<configuration> <appSettings> <add key="Name" value="www.Barnamenevisan.org"/> </appSettings> <system.web> <compilation debug="true" targetFramework="4.0" /> </system.web> </configuration>
مقدار مورد نظر ما برای رمزنگاری www.Barnamenevisan.Org است
خب در صفحه برنامه دو کلید وجود دارد کلید اول برای رمزنگاری با عنوان btnEncrypt
با فعال شدن این کلید یک متد با نام EncryptAppSetting فراخوانی میشود
private void EncryptAppSetting(string key) { string path = Server.MapPath("~/Web.Config"); XmlDocument doc = new XmlDocument(); doc.Load(path); XmlNodeList list = doc.DocumentElement.SelectNodes(string.Format("appSettings/add[@key='{0}']", key)); if (list.Count == 1) { XmlNode node = list[0]; string value = node.Attributes["value"].Value; node.Attributes["value"].Value = Encrypt(value); doc.Save(path); } }
این متد مقدار Name را از AppSetting داخل Web.Config خوانده و تحویل متدی با نام Encrypt میده برای رمز نگاری
private string Encrypt(string clearText) { string EncryptionKey = "123456"; byte[] clearBytes = Encoding.Unicode.GetBytes(clearText); using (Aes encryptor = Aes.Create()) { Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 }); encryptor.Key = pdb.GetBytes(32); encryptor.IV = pdb.GetBytes(16); using (MemoryStream ms = new MemoryStream()) { using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write)) { cs.Write(clearBytes, 0, clearBytes.Length); cs.Close(); } clearText = Convert.ToBase64String(ms.ToArray()); } } return clearText; }
متد بالا وظیفه رمز نگاری را بر عهده دارد و دقت کنید کلیدی که شما برای رمزنگاری درج میکنید برای بازگشت نیز نیاز است
string EncryptionKey = "123456";
بعد از زدن کلید مقدار داخل Name رمزنگاری خواهد شد
خب حالا نوبت کلید Decrypt شده
این کلید باید رشته را به حالت اول برگردانده و تحویل ما بدهد
با فعال شدن این کلید متدی با نام Decrypt فراخوانی خواهد شد که رشته رمزنگاری شده را دریافت و متن واقعی را برمیگرداند
private string Decrypt(string cipherText) { string EncryptionKey = "123456"; byte[] cipherBytes = Convert.FromBase64String(cipherText); using (Aes encryptor = Aes.Create()) { Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 }); encryptor.Key = pdb.GetBytes(32); encryptor.IV = pdb.GetBytes(16); using (MemoryStream ms = new MemoryStream()) { using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateDecryptor(), CryptoStreamMode.Write)) { cs.Write(cipherBytes, 0, cipherBytes.Length); cs.Close(); } cipherText = Encoding.Unicode.GetString(ms.ToArray()); } } return cipherText; }
نتیجه کار در تصویر زیر مشخص است
دقت کنید کلید درج شده در متد Encrypt باید در این متد نیز درج شود
نمونه هم براتون ضمیمه کردم
امیدوارم خوشتون اومده باشه
موفق و پیروز باشید
- ASP.net
- 6k بازدید
- 15 تشکر