PDA

View Full Version : سوال: مشکل با QueryString و رمز کردن String



ehsan2007
شنبه 12 مرداد 1387, 11:11 صبح
سلام دوستان من یک String رو رمز نگاری میکنم و با Request.QueryString اونو از urlکه میخونم مشکل داره بررسی که کردم به جای + وقتی بر میگردونه یک فاصله میگزاره چیکار کنم که اینجوری نشه
از MD5 برای رمزنگاری استفاده میکنم
لطفا کمک کنید

milade
شنبه 12 مرداد 1387, 11:24 صبح
مگه داده هات رو برای چه کاری می خوای که از md5 استفاده می کنی چون می دونی که غیر قابل بازگشته
راستی یه نمونه از مشکلت بزار من که اصلا منظورت رو نفهمیدم

ehsan2007
شنبه 12 مرداد 1387, 12:33 عصر
این کلاس رمز نگاری

public class HashCode
{
public string Hashin(string _S)
{
try
{
byte[] IV = new byte[8] {240, 32, 45, 29, 0, 76, 173, 59};
string cryptoKey = "ELES";
byte[] buffer = System.Text.Encoding.ASCII.GetBytes(_S);
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
MD5CryptoServiceProvider MD5 = new MD5CryptoServiceProvider();
des.Key = MD5.ComputeHash(System.Text.ASCIIEncoding.ASCII.Ge tBytes(cryptoKey));
des.IV = IV;
byte[] CodedBuffer = des.CreateEncryptor().TransformFinalBlock(buffer, 0, buffer.Length);
return System.Convert.ToBase64String(CodedBuffer, 0, CodedBuffer.Length);
}
catch (Exception) { return "0"; }
}

public string Hashout(string _S)
{
try
{
byte[] IV = new byte[8] {240, 32, 45, 29, 0, 76, 173, 59};
string cryptoKey = "ELES";
string CodedString64 = _S;
byte[] buffer = Convert.FromBase64String(CodedString64);
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
MD5CryptoServiceProvider MD5 = new MD5CryptoServiceProvider();
des.Key = MD5.ComputeHash(System.Text.ASCIIEncoding.ASCII.Ge tBytes(cryptoKey));
des.IV = IV;
byte[] CodedBuffer = des.CreateDecryptor().TransformFinalBlock(buffer, 0, buffer.Length);
return System.Text.Encoding.ASCII.GetString(CodedBuffer);
}
catch (Exception) { return "0"; }
}
}
وقتی مثلا w براش میفرستی اینو برگشت میده 0ddxyIr+2ek=
ولی وقتی با url و از طریق querystring میخونم به جای + فاصله میگزاره

milade
شنبه 12 مرداد 1387, 12:55 عصر
من که نمیدونم چرا md5 می کنی
ولی به هر حال یا یونی کد کن یا بهد از md5 کردن رمز نگاری 64 بایتی کن و در مقصد برشگردون
بای

naeeme
شنبه 12 مرداد 1387, 15:34 عصر
جای + وقتی بر میگردونه یک فاصله میگزاره
شما وقتی از URL می گیرید باید یه دستور بنویسین که به جای فاصله + بذاره. این خاصیت URL هست که به جای +، فاصله میزاره و اگه نمونه کدهایی در این زمینه پیدا کنین، خواهید دید که در تمام این کدها، این جابجایی در نظر گرفته شده است.

milade
شنبه 12 مرداد 1387, 16:38 عصر
راستی میتونی با تابع replace + ها رو به " "فضای خالی تغییر بدی

raznahan
یک شنبه 13 مرداد 1387, 20:21 عصر
با سلام .

شما برای اینجور کارها میتونید از متد UrlEncode کلاس Server استفاده کنید .

به این صورت :

ُstring s = Server.UrlEncode(Request.QueryString["YourQueryStringName"].ToString());

این متد متن ورودی رو به استاندارد URL تبدیل میکنه مثلا به جای فاصله ،+ قرار میده یا به جای ؟ ،3f% قرار میده و ....

همچنین متد UrlDecode عمل عکس رو انجام میده .

ehsan2007
یک شنبه 13 مرداد 1387, 22:23 عصر
دیروز قبل از اینکه سوالمو اینجا بگزارم این فکر به ذهنم رسید ولی کدشو نتونستم بنویسم وقتی با آجاکس کار میکنم و میخوام کلمه ای رو سند کنم و جوابو بگیرم توی کد زیر میزارمش

encodeURI(_S)
ولی نتونستم کدشو پیدا کنم تحت سرور
از همه دوستان ممنونم

h.alizadeh
یک شنبه 13 مرداد 1387, 22:49 عصر
encodeURI(_S)

يعني بااين ميشه متغير رو كد كرد؟؟ s الان اسم متغير هست؟؟فقط همين رو مي نويسيم بعد با این کدی که راز نهان گذاشتند برمی گردونیم آره؟؟

raznahan
یک شنبه 13 مرداد 1387, 23:30 عصر
يعني بااين ميشه متغير رو كد كرد؟؟ s الان اسم متغير هست؟؟فقط همين رو مي نويسيم بعد با این کدی که راز نهان گذاشتند برمی گردونیم آره؟؟

من منظور شما رو متوجه نشدم . ولی با متد UrlEncode شما فقط یک رشته رو که برای کاربر قابل فهم هست (مثل : www.you.com/test.aspx?name=string (http://www.you.com/test.aspx?name=string) with space)به رشته ای که مطابق استاندارد URL باشه تبدیل میکنید . ( www.you.com%2ftest.aspx%3fname%3dstring+with+space (http://www.you.com%2ftest.aspx%3fname%3dstring+with+space ))

با تشکر

h.alizadeh
دوشنبه 14 مرداد 1387, 23:42 عصر
مرسی من منظورم این بود که مثلا من یک مقداری رو در متغیر کوئری استرینگ گذاشتم ولی می خوام بصورت رمزی توی نوار آدرس نمایش داده بشه و بعد در صفحه موردنظر هم بتونم راحت مقدارش رو استفاده کنم.

منظورم این بود آیا با یک کد ساده می تونم اینکارا رو انجام بدم؟؟
یعنی رمز کردن و رمزگشایی رو...

milade
سه شنبه 15 مرداد 1387, 00:28 صبح
اره رمز نگاری 54 بایتی
اینم کدش :
رمز کردن :c#



string String = "I LOVE ASP.net";
byte [] Byte = System.Text.Encoding.ASCII.GetBytes(String);
Label1.Text = Convert.ToBase64String(Byte);

رمز کردن vb:

Dim String As String = "I LOVE ASP.net"
Dim Byte As Byte() = System.Text.Encoding.ASCII.GetBytes(String)
Label1.Text = Convert.ToBase64String(Byte)

رمز برگرداندن c#:



string MyBase64String = "SSBMT1ZFIEFTUC5uZXQ=";
byte[] MyByte =Convert.FromBase64String(MyBase64String);
Label1.Text = System.Text.Encoding.ASCII.GetString(MyByte);

رمز برگرداندن vb:

Dim MyBase64String As String = "SSBMT1ZFIEFTUC5uZXQ="
Dim MyByte As Byte() = Convert.FromBase64String(MyBase64String)
Label1.Text = System.Text.Encoding.ASCII.GetString(MyByte)
موفق باشی
بای

raravaice
سه شنبه 15 مرداد 1387, 00:57 صبح
اره رمز نگاری 54 بایتی

میلاد جان Base 64 رو عموما برای رمز نگاری امنیتی استفاده نمیکنن.کاربردش بیشتر در مواردی هست که شما نیاز دارید یک داده باینری رو در قالب متن جابجا کنید.

System.Security.Cryptography.Rijndael
انتخاب خوبی هست و قابل برگشت.
و پیشنهاد میکنم برای امنیت بیشتر MD5 یا یکی از الگوریتمها موجود SHA در دات نت همراه با این نوع داده استفاده بشه.
همه اینها در حالی هست که اطلاعات شما سطح امنیتی متوسط داشته باشه در غیر این صورت به جای کوری از کوکی استفاده کنید و خاصیت HttpOnly اون رو برابر با True قرار بدید هر چند که مرورگر های Apple هنوز که هنوز خودشون رو با این قابلیت وفق ندادن ولی توی مرور گر های دیگه جلوی خرابکاری و تغییر داده هارو تا حد زیادی میگیره.

راجع بهش جستجو کنید.

موفق باشید

milade
سه شنبه 15 مرداد 1387, 02:09 صبح
منظورم این بود آیا با یک کد ساده می تونم اینکارا رو انجام بدم؟؟
یعنی رمز کردن و رمزگشایی رو...
خوب من هم یه رمز نگاری ساده پیشنهاد کردم
راستی بعضی ها رو که گفتید غیر قابل برگشته مثل MD5 و SHA1 در حالی که دوستمون قابل برگشت می خواستن
بای

twelve
سه شنبه 15 مرداد 1387, 03:00 صبح
همونطور که دوست خوبم raravaice گفتن اینگونه رمزنگاری ها برای داده هایی با سطح امنیتی متوسط هست چون مقادیر کد شده نیاز به بازگشت به حالت اول دارن که همین مورد باعث میشه که امکان رمزگشایی برای هکر ها وجود داشته باشه ، در صورتی که میخواین چنین کاری رو انجام بدید ، از کلاسهای MACTripleDES ،RC2CryptoServiceProvider ، MD5CryptoServiceProvider استفاده کنید که برای انجام این کار رایج ترن.

h.alizadeh
پنج شنبه 17 مرداد 1387, 23:09 عصر
اره رمز نگاری 54 بایتی
اینم کدش :
رمز کردن :c#

رمز کردن vb:


رمز برگرداندن c#:

رمز برگرداندن vb:

موفق باشی
بای

ممنون اقا میلاد دستتون درد نکنه ولی می گم این کدها وقتی مقدار متغیر کوئری استرینگم فارسی باشه خطا میده!

raravaice
جمعه 18 مرداد 1387, 00:52 صبح
این کدها وقتی مقدار متغیر کوئری استرینگم فارسی باشه خطا میده!

به جای ASCII از UTF8 استفاده بشه.

موفق باشید