1396-08-28 00:16 رمزنگاری ConnectionString دیتابیس
حاجی شریفی
مؤسس سایت
 
سلام
یکی از نگرانی هایی که در برنامه های exe تحت دیتابیس های شبکه داخلی مطرح میشود، تامین امنیت User,Pass دیتابیس و درکل ConnectionString است.
بطوریکه برنامه بتواند به دیتابیس متصل شود ولی برنامه یا افراد ثالث نتوانند از ConnectionString برای ارتباط مستقیم با دیتابیس استفاده کنند.

البته برای برنامه هایی در سطح شبکه های وسیع تر، بهتر است بطور کل از ارتباط مستقیم با دیتابیس اجتناب شود و نیازهای عملیاتی-ارتباطی برنامه با واسطه یک WebService یا WebAPI و... تامین شود.

ولی درهرصورت هدف این تاپیک ارائه یک کد ساده جهت رمزنگاری موثر روی ConnectionString است.

برای رمزنگاری یک متن با الگوریتم AES میتوان از کد ساده ای شبیه این استفاده کرد:
public string  Encrypt(string  data)
{
if (string .IsNullOrEmpty(data)) return null ;
byte [] buffer = System.Text.Encoding.UTF8.GetBytes(data);
using (var aes = new System.Security.Cryptography.AesCryptoServiceProvider())
{
aes.Key = KEY ;
aes.IV = IV ;
using (var crypt = aes.CreateEncryptor())
using (var mem = new System.IO.MemoryStream())
using (var cs = new System.Security.Cryptography.CryptoStream(mem, crypt, System.Security.Cryptography.CryptoStreamMode.Write))
{
cs.Write(buffer, 0, buffer.Length);
cs.FlushFinalBlock();
return Convert.ToBase64String(mem.GetBuffer(), 0, (int )mem.Length);
}
}
}


و برای رمزگشایی برعکس هم همچین کدی کافی است:
public string  Decrypt(string  data)
{
if (string .IsNullOrEmpty(data)) return null ;
byte [] buffer = Convert.FromBase64String(data);
using (var aes = new System.Security.Cryptography.AesCryptoServiceProvider())
{
aes.Key = KEY ;
aes.IV = IV ;
using (var crypt = aes.CreateDecryptor())
using (var mem = new System.IO.MemoryStream(buffer, 0, buffer.Length, false ))
using (var mem2 = new System.IO.MemoryStream())
using (var cs = new System.Security.Cryptography.CryptoStream(mem, crypt, System.Security.Cryptography.CryptoStreamMode.Read))
{
cs.CopyTo(mem2);
return System.Text.Encoding.UTF8.GetString(mem2.GetBuffer(), 0, (int )mem2.Length);
}
}
}


مقادیر KEY و IV بردارهای شروع و رمزنگاری هستند که میتوانید از آنها مشابه Password استفاده کنید.
کدهای اصلی رمزنگاری را میتوانید در کلاس StringCryptography در پروژه نمونه مشاهده کنید.

دانلود پروژه نمونه
Simorgh.ConnectionString.zip