رمزنگاری Web.Config

چهارشنبه 18 دی 1392

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

رمزنگاری 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 باید در این متد نیز درج شود

نمونه هم براتون ضمیمه کردم

امیدوارم خوشتون اومده باشه

موفق و پیروز باشید

فایل های ضمیمه

ایمان مدائنی

نویسنده 1299 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید