PDA

View Full Version : سوال: رمز کردن query ؟



Modifier
شنبه 01 خرداد 1389, 15:50 عصر
سلام

چگونه query string را رمز دار کنم و بفرستیم...

با تشکر..

Peyman.Gh
شنبه 01 خرداد 1389, 16:18 عصر
سلام

چگونه query string را رمز دار کنم و بفرستیم...

با تشکر..

برای Encode کردن :
string id = "1";
string encode = Convert.ToBase64String(System.Text.Encoding.ASCII. GetBytes(id));
Response.Redirect("default.aspx?id=" + encode);

برای Decode کردن :
byte[] querystring = Convert.FromBase64String(Request.QueryString["id"]);
string id = System.Text.Encoding.ASCII.GetString(querystring);
Response.Write(id);

موفق باشید.

Behrouz_Rad
شنبه 01 خرداد 1389, 19:53 عصر
روش فوق صحیح نیست. در حقیقت امنیت روش فوق "صفر" هست.
من به راحتی می تونم عبارت کد شده رو در برنامه ی خودم به متد FromBase64String بدم و عبارت رمزنگاری شده رو به دست بیارم چون از الگوریتمی استفاده شده که از هیچ کلیدی برای رمزنگاری استفاده نمی کنه.
از کلاس DESCryptoServiceProvider استفاده کن.

موفق باشید.

Peyman.Gh
شنبه 01 خرداد 1389, 20:15 عصر
روش فوق صحیح نیست. در حقیقت امنیت روش فوق "صفر" هست.
من به راحتی می تونم عبارت کد شده رو در برنامه ی خودم به متد FromBase64String بدم و عبارت رمزنگاری شده رو به دست بیارم چون از الگوریتمی استفاده شده که از هیچ کلیدی برای رمزنگاری استفاده نمی کنه.
از کلاس DESCryptoServiceProvider استفاده کن.

موفق باشید.

کاملاً درست است.
در کلاس DESCryptoServiceProvider خودمان کلید را تعیین میکنیم یا از الگوریتم هایی مانند MD5 استفاده میشود !؟
در صورت امکان یک مثال برای این کلاس بزنید.

Behrouz_Rad
شنبه 01 خرداد 1389, 20:35 عصر
کاملاً درست است.
در کلاس DESCryptoServiceProvider خودمان کلید را تعیین میکنیم یا از الگوریتم هایی مانند MD5 استفاده میشود !؟
در صورت امکان یک مثال برای این کلاس بزنید.

SHA1 و MD5 الگوریتم های Hash هستند. یعنی مقدار Hash شده قابل برگشت نیست. ما نیاز به بازیابی مقدار داریم. الگوریتم DES و MD5 ارتباطی با هم ندارن. در DES کلید داری اما در MD5 نداری.
به عنوان مثال برای رمزنگاری و رمزگشایی عبارت با استفاده از الگوریتم DES به شکل ذیل عمل کن:


private static byte[] key = { };
private static byte[] IV = { 38, 55, 206, 48, 28, 64, 20, 16 };
private static string stringKey = "!1341a#BR";

public static string Encrypt(string text)
{
try
{
key = Encoding.UTF8.GetBytes(stringKey.Substring(0, 8));
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
Byte[] byteArray = Encoding.UTF8.GetBytes(text);
MemoryStream memoryStream = new MemoryStream();
CryptoStream cryptoStream = new CryptoStream(memoryStream,
des.CreateEncryptor(key, IV), CryptoStreamMode.Write);
cryptoStream.Write(byteArray, 0, byteArray.Length);
cryptoStream.FlushFinalBlock();
return Convert.ToBase64String(memoryStream.ToArray());
}
catch (Exception ex)
{
}

return string.Empty;
}

public static string Decrypt(string text)
{
try
{
key = Encoding.UTF8.GetBytes(stringKey.Substring(0, 8));
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
Byte[] byteArray = Convert.FromBase64String(text);
MemoryStream memoryStream = new MemoryStream();
CryptoStream cryptoStream = new CryptoStream(memoryStream, des.CreateDecryptor(key, IV), CryptoStreamMode.Write);
cryptoStream.Write(byteArray, 0, byteArray.Length);
cryptoStream.FlushFinalBlock();

return Encoding.UTF8.GetString(memoryStream.ToArray());
}
catch (Exception ex)
{
}

return string.Empty;
}

نکته ی مهم این هست که از هر روشی که برای رمزنگاری استفاده می کنی، رشته ی رمزنگاری شده رو باید از متد UrlEncode بگذرونی تا از خطا جلوگیری کنی. چون عبارت خروجی ممکنه از کاراکترهایی تشکیل شده باشه که در یک URL مفهوم خاصی دارن. به عنوان مثال، کاراکتر "/" تبدیل به 2f% میشه. قبل از رمزگشایی نیز عبارت رو از متد UrlDecode عبور بده.

موفق باشید.

Mostafa_Dindar
یک شنبه 02 خرداد 1389, 01:47 صبح
سلام ،

كسي ميتونه لينكي از مقاله يا MSDN يا هر جاي ديگه كه الگوريتم هاي رمز دار كردن رو در دات نت ليست كرده باشه يا توضيح داده باشه رو اينجا بزاره ؟
اينقدر مطلب پراكنده از اين Encryption اين طرف و اونطرف خوندم به جايي نرسيدم . (هنوز واسم واضح نيست )

مرسي .

Behrouz_Rad
یک شنبه 02 خرداد 1389, 07:08 صبح
در System.Security.Cryptography همشون وجود دارن.

Peyman.Gh
یک شنبه 02 خرداد 1389, 21:15 عصر
برادر من رشته تقاضا را با استفاده از FormsAuthentication.HashPasswordForStoringInConfig File با دو الگوریتم MD5 یا SHA1 رمز نگاری میکنم.این روش مشکلی دارد ؟!

hamedsabzian
یک شنبه 02 خرداد 1389, 22:05 عصر
برادر من رشته تقاضا را با استفاده از FormsAuthentication.HashPasswordForStoringInConfig File با دو الگوریتم MD5 یا SHA1 رمز نگاری میکنم.این روش مشکلی دارد ؟!

اگه Hash میکنی، میشه بگی چجوری فرایند عکسش رو انجام میدی؟

Peyman.Gh
یک شنبه 02 خرداد 1389, 22:22 عصر
اگه Hash میکنی، میشه بگی چجوری فرایند عکسش رو انجام میدی؟ الگوریتم های MD5 و Sh1 برگشت ناپذیر هستند.

hamedsabzian
یک شنبه 02 خرداد 1389, 22:42 عصر
منم منظورم همینه!
معمولا نیاز داریم مقادیر واقعی پارامترای QueryString دسترسی داشته باشیم.
مگه اینکه شما مواردی از عدم این موضوع رو مثال بزنید.

Peyman.Gh
یک شنبه 02 خرداد 1389, 22:47 عصر
منم منظورم همینه!
معمولا نیاز داریم مقادیر واقعی پارامترای QueryString دسترسی داشته باشیم.
مگه اینکه شما مواردی از عدم این موضوع رو مثال بزنید.

به طور مثال دو عبارت Encode شده را باهم مقایسه کنیم.کاری که در ذخیره Password انجام میدیم.

Behrouz_Rad
دوشنبه 03 خرداد 1389, 00:02 صبح
به طور مثال دو عبارت Encode شده را باهم مقایسه کنیم.کاری که در ذخیره Password انجام میدیم.
من متوجه نمیشم که کاربرد Hashing در Query String چی هست... حتی اگر این فرض رو هم بگیریم که مقادیر ثابت هستند، منطقی نیست که از یک الگوریتم Hash استفاده کنی!

Peyman.Gh
دوشنبه 03 خرداد 1389, 00:15 صبح
در کل بنظرم نیاز نیست رشته تقاضا را Encode کنیم.


من متوجه نمیشم که کاربرد Hashing در Query String چی هست
منظورم این است که رشته تقاضا را Hash و مقایسه کنیم.
دلایل منطقی نبودن این روش رو میگید؟

Modifier
دوشنبه 03 خرداد 1389, 00:29 صبح
private static byte[] key = { };
private static byte[] IV = { 38, 55, 206, 48, 28, 64, 20, 16 };
private static string stringKey = "!1341a#BR";

میشه لطف کنین در مورد بالایی ها توضیح بدید.

ممنون.

Modifier
دوشنبه 03 خرداد 1389, 00:31 صبح
نکته ی مهم این هست که از هر روشی که برای رمزنگاری استفاده می کنی، رشته ی رمزنگاری شده رو باید از متد UrlEncode بگذرونی تا از خطا جلوگیری کنی. چون عبارت خروجی ممکنه از کاراکترهایی تشکیل شده باشه که در یک URL مفهوم خاصی دارن. به عنوان مثال، کاراکتر "/" تبدیل به 2f% میشه. قبل از رمزگشایی نیز عبارت رو از متد UrlDecode عبور بده.

موفق باشید.

من توی کدتون ندیدم...شما استفاده کردین ؟

Behrouz_Rad
دوشنبه 03 خرداد 1389, 07:44 صبح
در کل بنظرم نیاز نیست رشته تقاضا را Encode کنیم.

میزان درجه ی امنیت Query String ها و نوع محیطی که با اونها سر و کار داره در این انتخاب مهم هست.
مثلاً در همین سایت، پارامتر t با ID تاپیک برای صفحه ی showthread.php ارسال میشه که لزومی به کد کردن اون وجود نداره چون چیز مهمی نیست.


منظورم این است که رشته تقاضا را Hash و مقایسه کنیم.
دلایل منطقی نبودن این روش رو میگید؟

آخه دلیلی نداره. با چی مقایسه کنی؟ مثلاً همین پارامتر t می تونه بیش از 200000 مقدار داشته باشه. آیا میخوای مقدار اون رو با 200000 مقدار چک کنی و ببینی که با کدام مقدار برابر هست؟


میشه لطف کنین در مورد بالایی ها توضیح بدید.

الگوریتم DES برای عملکرد خودش نیاز به یک آرایه از بایت های یک Key و یک IV داره. رشته ی stringKey به []byte تبدیل شده و در متغیر key قرار گرفته. IV نیز آرایه ای از تعدادی عدد اختیاری است. این دو مقدار برای رمزنگاری به متد CreateEncryptor و برای رمزگشایی به متد CreateDecryptor پاس داده شدن.


من توی کدتون ندیدم...شما استفاده کردین ؟

این رو به خودت واگذار کردم چون یک خط کد برای هر حالت بیشتر نیست!

Modifier
دوشنبه 03 خرداد 1389, 14:18 عصر
الگوریتم DES برای عملکرد خودش نیاز به یک آرایه از بایت های یک Key و یک IV داره. رشته ی stringKey به []byte تبدیل شده و در متغیر key قرار گرفته. IV نیز آرایه ای از تعدادی عدد اختیاری است. این دو مقدار برای رمزنگاری به متد CreateEncryptor و برای رمزگشایی به متد CreateDecryptor پاس داده شدن.

ببخشید که مزاحم میشم..

اینطور که فهمیدم مقدار stringKey به عهده خودمون هست؟درسته ؟

و همین طور stringKey مهمترین قسمت رمزنگاری هست که باید فقط خودمون از اون با خبر باشیم؟درسته؟

با تشکر..

یا علی.

Behrouz_Rad
دوشنبه 03 خرداد 1389, 22:02 عصر
ببخشید که مزاحم میشم..

اینطور که فهمیدم مقدار stringKey به عهده خودمون هست؟درسته ؟

و همین طور stringKey مهمترین قسمت رمزنگاری هست که باید فقط خودمون از اون با خبر باشیم؟درسته؟

با تشکر..

یا علی.


هم stringKey و هم IV مهم هستند. مقدارشون هم دلخواه هست. فقط هم خودت باید خبر داشته باشی.

Modifier
سه شنبه 04 خرداد 1389, 23:58 عصر
من قسمتی از Querystring ها رو از websitemap میفرستم...

رمز گشاییش با مطالبی که شما گفتید شدنیست ولی چطور تبدیلش کنم به رمز...

ممنون.

Modifier
دوشنبه 14 تیر 1389, 17:59 عصر
وقتي از متد Decrypt استفاده ميكنم exceptiom--->> BadData ميده!!!

يعني چي؟