PDA

View Full Version : کد کردن ConnectionString



neda555
سه شنبه 08 مهر 1393, 12:32 عصر
سلام میشه لطفا یه نفر کامل نحوه ی کد کردن connectionstring و hash کردن پسورد رو توضیح بده?!

حمید رضا رحیمیان
سه شنبه 08 مهر 1393, 12:51 عصر
سلام
برای گرفتن ادرس بانک باید در web.config اطلاعات وارد کنید مثلا این طور

<connectionStrings>
<add
name="NorthwindConnectionString"
connectionString="Data Source=serverName;Initial
Catalog=Northwind;Persist Security Info=True;User
ID=userName;Password=password"
providerName="System.Data.SqlClient"
/>
</connectionStrings


نحوه ی استفاده در C#

System.Configuration.Configuration rootWebConfig =
System.Web.Configuration.WebConfigurationManager.O penWebConfiguration("/MyWebSiteRoot");
System.Configuration.ConnectionStringSettings connString;
if (rootWebConfig.ConnectionStrings.ConnectionStrings .Count > 0)
{
connString =
rootWebConfig.ConnectionStrings.ConnectionStrings["NorthwindConnectionString"];
if (connString != null)
Console.WriteLine("Northwind connection string = \"{0}\"",
connString.ConnectionString);
else
Console.WriteLine("No Northwind connection string");
}


برای هاش کردن پسورد هم در بانک اطلاعاتی باید فیل پسورد را به صورت کاراکتر انتخاب کنید و به صورت هاش یا md5 وارد کنید

saeed31641
سه شنبه 08 مهر 1393, 13:02 عصر
برای پسورد که توابع هش زیاد هستند پسورد میفرستی به هش تبدیل میکنه مثلاmdf
var getConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
var decryptConnection = DecryptConnection(getConnectionString);

using (SqlConnection connection = new SqlConnection(decryptConnection))
{
// To some thing here
}

------------------
NameSpaces :
------------------

using System.Security.Cryptography;
using System.Configuration;
using System.Data.SqlClient;

------------------
Initialization :
------------------

const string passphrase = "connection";

---------------
Encryption :
---------------

private static string EncryptConnection(string connectionString)
{
byte[] results;
var uTF8Encoding = new UTF8Encoding();
var HashProvider = new MD5CryptoServiceProvider();
byte[] TDESKey = HashProvider.ComputeHash(uTF8Encoding.GetBytes(pas sphrase));
var tDESAlgorithm = new TripleDESCryptoServiceProvider();

tDESAlgorithm.Key = TDESKey;
tDESAlgorithm.Mode = CipherMode.ECB;
tDESAlgorithm.Padding = PaddingMode.PKCS7;
byte[] dataToEncrypt = uTF8Encoding.GetBytes(connectionString);

try
{
ICryptoTransform Encryptor = tDESAlgorithm.CreateEncryptor();
results = Encryptor.TransformFinalBlock(dataToEncrypt, 0, dataToEncrypt.Length);
}
finally
{
tDESAlgorithm.Clear();
HashProvider.Clear();
}

return Convert.ToBase64String(results);
}

---------------
Decryption :
---------------

private static string DecryptConnection(string connectionString)
{
byte[] results;
var uTF8Encoding = new UTF8Encoding();
var hashProvider = new MD5CryptoServiceProvider();
byte[] tDESKey = hashProvider.ComputeHash(uTF8Encoding.GetBytes(pas sphrase));
var tDESAlgorithm = new TripleDESCryptoServiceProvider();

tDESAlgorithm.Key = tDESKey;
tDESAlgorithm.Mode = CipherMode.ECB;
tDESAlgorithm.Padding = PaddingMode.PKCS7;
byte[] dataToDecrypt = Convert.FromBase64String(connectionString);

try
{
ICryptoTransform Decryptor = tDESAlgorithm.CreateDecryptor();
results = Decryptor.TransformFinalBlock(dataToDecrypt, 0, dataToDecrypt.Length);
}
finally
{
tDESAlgorithm.Clear();
hashProvider.Clear();
}

return uTF8Encoding.GetString(results);
}


<connectionStrings>
<add name="ConnectionString"
connectionString="7Os+mKN5qLvQWu9FfIhHr***WoPvz875oi+s9o7nvI529cFnim 2U9AE9g9865ZF0L4Jaae+94dxM9enuRAskIWfW5kpWFUhfBAPY g1YQoV4ptgRH+qPiS+ByaA8CcxsSst0oCZWFN6ejg5+a2jhgHj 2c1QWlI1KhZckultjWsUw="
providerName ="System.Data.SqlClient" />
</connectionStrings>

فقط یه تیبل درست کن یه فیلد بزار که هر وقت اون فیلد ۱ بود تیدیل به هش کنه ۰ بود عادی باشه قبلا از هش کردن اون فیلد رو بخون بعد تصممی بگیر هش کنه

neda555
سه شنبه 08 مهر 1393, 17:51 عصر
ممنون از پاسختون در صورتی که از Entity Framwork استفاده کنیم به چه صورتیه؟

ahmad156
جمعه 11 مهر 1393, 07:42 صبح
اگر یک هکر بتونه به FTP شما دسترسی پیدا کنه، به راحتی قادر هست به فایل Web.Config دسترسی داشته باشه... و همچنین به تمامی منابع سایت شما!
در این صورت می تونه صفحه ای بر روی سایت شما آپلود کنه و به شکل Plain Text، کانکشن استرینگ شما رو برداره.

نتیجه: کد کردن یا نکردن کانکشن استرینگ عملی بیهوده است!

neda555
جمعه 11 مهر 1393, 18:11 عصر
جناب ahmad156 (http://barnamenevis.org/member.php?143716-ahmad156) فرمایش شما متین ولی از من خواسته شده این کار رو انجام بدم در entity چه طور باید این کارو انجام داد؟

ahmad156
جمعه 11 مهر 1393, 18:23 عصر
شما اگر از Code First استفاده کنین که Web.Config که تون به همین شکل هست و مشکلی نیست.
من جای شما بودم یه جوری اونا به کار اشتباهشون قانع میکردم:لبخندساده:

saeed31641
جمعه 11 مهر 1393, 18:53 عصر
public partial class CURAEntities : DbContext
{
public CURAEntities(string dummy)
: base("name=CURAEntities")
{
string con = ConfigurationManager.AppSettings["CURA"].ToString();
DES_Codec myCodec = new DES_Codec();
Database.Connection.ConnectionString = myCodec.DecodeString(con);
}
}

http://thegrayzone.co.uk/blog/2010/06/dynamically-alter-entityframework-connectionstring-in-domain-service/

neda555
جمعه 11 مهر 1393, 19:13 عصر
ahmad156 (http://barnamenevis.org/member.php?143716-ahmad156) ممنون،حال ندارم باهاش بحث کنم ترجیح میدم انجامش بدم ضرر که نداره :)
saeed31641 (http://barnamenevis.org/member.php?208682-saeed31641) با این کلاس چه کنم میشه یکم توضیح بدین ؟تنها چیزی که دارم یه رشته در وب کانفیگه این کلاس رو کجا قرار بدم؟شاید هم باید باهاش کد کنم و کد شدش رو بزارم در وب کانفیگ؟!

saeed31641
شنبه 12 مهر 1393, 08:02 صبح
دوست عزیز اگر شماCode First استفاده کنی اون تابع معلوم باید فقط کلاس تبدیل رو فراخوانی کنی. چنین کلاسی باید خودت داشته باشی شما فقط تبدیل رو انجام میدی

neda555
شنبه 12 مهر 1393, 10:20 صبح
بله درسته! ممنون از پاسختون:لبخندساده:

saeed31641
شنبه 12 مهر 1393, 12:32 عصر
معلوم که اصلا متوجه نشدین اگه متوجه نشدینواقعا بگین تا سورس کامل روبراتون بزارم

korosh00
شنبه 12 مهر 1393, 15:23 عصر
لطفا قرار بدید .
ممنون

neda555
دوشنبه 14 مهر 1393, 13:44 عصر
saeed31641 (http://barnamenevis.org/member.php?208682-saeed31641)
چرا متوجه شدم کلاسشو پیدا کردم ،اول رشتم رو تعریف میکنم واسش به شکلی که امکان داینامیک شدن و تغییر پسورد و اینا بعدا وجود داشته باشه و کلاس تبدیل رشته به رمز رو واسش فراخوانی میکنم
هنوز انجامش ندادم اگر کد بزارید هم ممنون میشم

orasion
پنج شنبه 07 خرداد 1394, 20:18 عصر
سلام دوستان من یه مشکل توی دیکرایپت کردن کانشن هام دارم . در واقع چند تا گرید ویوو دارم که با ویزارد به بانک وصلشون کردم و بصورت اتوماتیک اطلاعات را میخونن یا بروز میکنن حالا بخاطر همین هم نمی تونم دستی بهشون کانکشن رو پاس کنم. توی دیزاینر فرم رو هم زیر و رو کردم ولی چیزی پیدا نکردم. در حقیقت توی کلاسهایی که بصورت دستی با بانک ارتباط برقرار میکنم این مشکل نیست و فقط برای کنترلهایی که با خود دات نت به بانک وصلشون کردم این این مشکل رو دارم.