PDA

View Full Version : راهنمایی برای رمز گزاری



elderado
چهارشنبه 22 شهریور 1391, 11:51 صبح
با سلام و خسته نباشید خدمت مهندسین عزیز
دوستان من یه نرم افزار نوشتم و الان آماده استفاده هست، الان به فکر رمز گزاری داده هایی که بین کلاینت و سرور رد و بدل میشه افتادم که خیلی هم کار مهمی هست
اما من هیچی از این کار بلد نیستم و نمیدونم باید چیکار کنم
لطفا رهنمایی کنید
ممنونم

AmirGhasemi
چهارشنبه 22 شهریور 1391, 12:20 عصر
نه! نه! نه!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
roolinjax (http://barnamenevis.org/member.php?208617-roolinjax) اين چه حرفيه مي زني؟!؟!؟! الگوريتم MD5يك الگوريتم يك طرف هست!!! نمي توني توي مقصد بازش كني!!!!!!!
دوست عزيز شما بايد از الگوريتم هاي متقارن يا نامتقارن مثل AES, RSA,DEs,DES3 استفاده كني

abcd_a
چهارشنبه 22 شهریور 1391, 12:25 عصر
سلام
تو سایت بارها در موردش بحث شده حتی بعضی از دوستان هم مثال های گذاشتند
تو قسمت نمونه برنامه های کوچک در سی شارپ هم مثال هست
فکر کنم تو سایت جستجو کنید زودتر به جواب برسی

elderado
چهارشنبه 22 شهریور 1391, 12:32 عصر
با تشکر از دوستان عزیز برای توجه شون
دوستان من فقط میخوام که اطلاعات توی برنامه که طرف کلاینت هست قابل فهم باشه
سمت سرور مهم نیست و بهتر هم اینه که سمت سرور کسی نتونه اطلاعات رو بخونه و بفهمه!
لطفا با کد راهنمای کنید من تا حالا این کار رو نکردم
ممنونم

roolinjax
چهارشنبه 22 شهریور 1391, 12:43 عصر
سلام
ببخشید من پستم رو پاک کردم اما فکر می کنم با این چیزی که شما گفتین همون روش من بهتر بود
!!!!!!
راه برگشت نیست اون پست رو دوباره برگردونم ؟
هه هه !!!
اگر خواستی بگو دوباره بنویسم

roolinjax
چهارشنبه 22 شهریور 1391, 12:44 عصر
سلام
ببخشید من پستم رو پاک کردم اما فکر می کنم با این چیزی که شما گفتین همون روش من بهتر بود
!!!!!!
راه برگشت نیست اون پست رو دوباره برگردونم ؟
هه هه !!!
اگر خواستی بگو دوباره بنویسم

elderado
چهارشنبه 22 شهریور 1391, 12:56 عصر
دوست عزیز ممنونم از پست شما
اما من نوشتن کد رو بلد نیستم
لطفا بگید اگه من بخوام از این روش استفاده کنم
کجاهای برنامه رو باید تغییر بدم


این یه نمونه اینزرت به دیتا ببیس هست

if (bl.bl.ginsert("insert into client (cli_fname,cli_lname,cli_nu,cli_add,cli_senf_id,cl i_tozihat,cli_state,cli_ostan,cli_shahrestan,cli_s hahr,cli_post,del)values(N'" + txt_cli_fname.Text + "',N'" + txt_cli_lname.Text + "','" + msk_cli_nu.Text + "',N'" + txt_cli_add.Text + "'," + Convert.ToInt32(textBox1.Text) + ",N'" + txt_cli_tozihat.Text + "',N'"+com_state.Text+"',N'"+txt_ostan.Text+"',N'"+txt_shhrstn.Text+"',N'"+txt_shhr.Text+"',"+Convert.ToInt32(txt_post.Text)+",'nd') "))
{
int rec_id = Convert.ToInt32(bl.bl.select("select cli_id from client where cli_id=ident_current('client')").Rows[0]["cli_id"].ToString());
bl.bl.ginsert("insert into log (user_id,op_id,table_name,rec_id,day,month,year,ti me) values (" + frm_main.user_id + ",1,'client'," + rec_id + ",'" + bl.dt.day + "','" + bl.dt.month + "','" + bl.dt.year + "','" + bl.dt.time + "')");
MessageBox.Show("متصدی با موفقیت اضافه شد");
dgv1.DataSource = bl.bl.select("select cli_id as 'کد متصدی',cli_fname as 'نام',cli_lname as 'نام خانوادگی',cli_nu as 'شماره تماس',senf_name as 'صنف کاری' from cli_v where cli_fname=N'" + txt_cli_fname.Text + "' and cli_lname=N'" + txt_cli_lname.Text + "' and cli_nu='" + msk_cli_nu.Text + "' and del='nd'");
}



که select هم داخلش هست
خب اگه من بخوام اطلاعات رو رمز گزاری کنم چه تغییری باید ایجاد کنم؟
لطفا رهنمایی کنید
ممنونم

negar.rafie
چهارشنبه 22 شهریور 1391, 13:08 عصر
این کد (http://barnamenevis.org/showthread.php?360390-%D9%81%D8%B4%D8%B1%D8%AF%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-%D8%B1%D8%B4%D8%AA%D9%87-%D8%B1%D9%85%D8%B2-%D9%86%DA%AF%D8%A7%D8%B1%DB%8C-%D8%B4%D8%AF%D9%87-%D8%AA%D9%88%D8%B3%D8%B7-%D8%A7%D9%84%DA%AF%D9%88%D8%B1%DB%8C%D8%AA%D9%85-%D9%87%D8%A7%D9%81%D9%85%D9%86&p=1590265&viewfull=1#post1590265) الگوریتم AES است
ولی رشته تولیدی رمزشده خیلی طولانی میشود و باید با الگوریتم هافمن فشرده سازی بشه
حالا اگر دوستان لطف کنن الگوریتم هافمن را به این سورس اضافه کنن سورس کامل میشود

elderado
چهارشنبه 22 شهریور 1391, 14:21 عصر
ممنونم از جواب
این پروژه با ویژوال 2010 هست، و مال من 2008 ، نمیتونم بازش کنم
اما کد رو دیدم
میشه این کد رو داخل یه کلاس بذارم و هر موقع خواستم کد یا دی کد کنم کلاس رو فراخوان کنم؟
کد برنامم رو گذاشتم توی پست اول
لطفا بگید باید چیکار کنم
ممنونم

FastCode
چهارشنبه 22 شهریور 1391, 16:21 عصر
شما برای رمزنگاری دستورات ه SQL باید این راهنما رو بخونید
http://support.microsoft.com/kb/316898

برای اون الگوریتم هم AES اگر از Deflate استفاده کنید, بازدهی و احتمالاً سرعت بیشتری میگیرید.
(تست سرعت نگرفتم ولی بازدهیش بیشتره)

samadblaj
چهارشنبه 22 شهریور 1391, 18:56 عصر
سلام اینم الگوریتم AES ببینید :
یا میتونید از تابع های غیر بازگشتی نظیر MD5 استفاده کنید ولی این تابع بیشتر برای ذخیره رمز ها و کد های از این قبیل کاربرد بیشتری داره که به اعتقاد من از یه الگوریتم بازگشتی خیلی ساده استفاده کن اگر اطلاعات براتون مهم نیست .
فایل زیر و هم دانلود کن یه روش دیگه است که همین الان نوشتم.
دانلود (http://wdl.persiangig.com/pages/download/?dl=http://samadblaj.persiangig.com/csharpiha/Project/ListProject_1/Coding.rar)


01public static string Encrypt(string PlainText, string Password, string Salt, string HashAlgorithm, int PasswordIterations, string InitialVector, int KeySize)
{
try
{
byte[] InitialVectorBytes = Encoding.ASCII.GetBytes(InitialVector);
byte[] SaltValueBytes = Encoding.ASCII.GetBytes(Salt);
byte[] PlainTextBytes = Encoding.UTF8.GetBytes(PlainText);
PasswordDeriveBytes DerivedPassword = new PasswordDeriveBytes(Password, SaltValueBytes, HashAlgorithm, PasswordIterations);
byte[] KeyBytes = DerivedPassword.GetBytes(KeySize / 8);
RijndaelManaged SymmetricKey = new RijndaelManaged();
SymmetricKey.Mode = CipherMode.CBC;
ICryptoTransform Encryptor = SymmetricKey.CreateEncryptor(KeyBytes, InitialVectorBytes);
MemoryStream MemStream = new MemoryStream();
CryptoStream cryptoStream = new CryptoStream(MemStream, Encryptor, CryptoStreamMode.Write);
cryptoStream.Write(PlainTextBytes, 0, PlainTextBytes.Length);
cryptoStream.FlushFinalBlock();
byte[] CipherTextBytes = MemStream.ToArray();
MemStream.Close();
cryptoStream.Close();
MemStream.Dispose();
cryptoStream.Dispose();
Encryptor.Dispose();
return Convert.ToBase64String(CipherTextBytes);
}
catch (Exception ex)
{
throw ex;
}
}


اینکود :
Encrypt("mykey", "mypassword", "mysalt", "MD5",5, "qwertyuiqwertyui", 256);


اینم کدهای بازگشت :

public static string Decrypt(string CipherText, string Password, string Salt, string HashAlgorithm, int PasswordIterations, string InitialVector, int KeySize)
{
try
{
byte[] InitialVectorBytes = Encoding.ASCII.GetBytes(InitialVector);
byte[] SaltValueBytes = Encoding.ASCII.GetBytes(Salt);
byte[] CipherTextBytes = Convert.FromBase64String(CipherText);
PasswordDeriveBytes DerivedPassword = new PasswordDeriveBytes(Password, SaltValueBytes, HashAlgorithm, PasswordIterations);
byte[] KeyBytes = DerivedPassword.GetBytes(KeySize / 8);
RijndaelManaged SymmetricKey = new RijndaelManaged();
SymmetricKey.Mode = CipherMode.CBC;
ICryptoTransform Decryptor = SymmetricKey.CreateDecryptor(KeyBytes, InitialVectorBytes);
MemoryStream MemStream = new MemoryStream(CipherTextBytes);
CryptoStream cryptoStream = new CryptoStream(MemStream, Decryptor, CryptoStreamMode.Read);
byte[] PlainTextBytes = new byte[CipherTextBytes.Length];
int ByteCount = cryptoStream.Read(PlainTextBytes, 0, PlainTextBytes.Length);
MemStream.Close();
cryptoStream.Close();
MemStream.Dispose();
cryptoStream.Dispose();
Decryptor.Dispose();
return Encoding.UTF8.GetString(PlainTextBytes, 0, ByteCount);
}
catch (Exception ex)
{
throw ex;
}
}



دیکود :


Decrypt("ND5lYPo4czOk5ZT7KNmU2Q==", "mypassword", "mysalt", "MD5",5, "qwertyuiqwertyui", 256);




=================اینم MD5





using System.Security.Cryptography;

...

static string Md5Hash(string input)
{
MD5 md5Hasher = MD5.Create();
byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(in put));
StringBuilder sBuilder = new StringBuilder();
for (int i = 0; i < data.Length; i++)
{
sBuilder.Append(data[i].ToString("x2"));
}
return sBuilder.ToString();
}

elderado
چهارشنبه 22 شهریور 1391, 20:10 عصر
از همه دوستان بخاطر کمکشون تشکر میکنم
میشه برام یه نمونه بزارین که هم کد کنه و هم دیکد کنه و توی دیتا گرید نمایش بده؟
ممنونم

samadblaj
چهارشنبه 22 شهریور 1391, 21:06 عصر
پست قبلی من یه پروژه هست برای کد و دیکد کردن.

ehsan7007
چهارشنبه 22 شهریور 1391, 22:32 عصر
من ننوشتمش ، فکر کنم ، تو خودش باشه.

elderado
پنج شنبه 23 شهریور 1391, 01:57 صبح
عزیزان این برنامه ها 2010 هستند و من ویژوال 2008 دارم ، نمیتونم ببینم اینا رو
خواهشا یه نمونه 2008 برام بزارین
اون برنامه جناب صمد خان هم نمیشه دانلود کرد از پرشین گیگ
ممنونم

samadblaj
پنج شنبه 23 شهریور 1391, 02:28 صبح
سلام ببخشید همینجا آپ کردم.
پروژه منم نسخه 2010 هست نیازی نیست کل پروژه رو اجرا کنید برید توی سورس کلاس رو با 2008 باز کنید.

elderado
پنج شنبه 23 شهریور 1391, 02:44 صبح
این کد (http://barnamenevis.org/showthread.php?360390-%D9%81%D8%B4%D8%B1%D8%AF%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-%D8%B1%D8%B4%D8%AA%D9%87-%D8%B1%D9%85%D8%B2-%D9%86%DA%AF%D8%A7%D8%B1%DB%8C-%D8%B4%D8%AF%D9%87-%D8%AA%D9%88%D8%B3%D8%B7-%D8%A7%D9%84%DA%AF%D9%88%D8%B1%DB%8C%D8%AA%D9%85-%D9%87%D8%A7%D9%81%D9%85%D9%86&p=1590265&viewfull=1#post1590265) الگوریتم AES است
ولی رشته تولیدی رمزشده خیلی طولانی میشود و باید با الگوریتم هافمن فشرده سازی بشه
حالا اگر دوستان لطف کنن الگوریتم هافمن را به این سورس اضافه کنن سورس کامل میشود


من از کلاس شما استفاده کردم و اطلاعات رو میتونم الان موقع اینزرت کردن کد کنم
حالا موقع برگشت اطلاعات از پایگاه داده که مثلا بادستور

dgv1.DataSource = bl.bl.select("select cli_id as 'کد متصدی',cli_fname as 'نام',cli_lname as 'نام خانوادگی',cli_nu as 'شماره تماس',senf_name as 'صنف کاری' from cli_v where cli_fname=N'" + txt_cli_fname.Text + "' and cli_lname=N'" + txt_cli_lname.Text + "' and cli_nu='" + msk_cli_nu.Text + "' and del='nd'");


انجام میشه، چجوری اینو دی کد کنم که توی دیتا گرید به شکل درست خودش نمایش داده بشه؟
ممنونم خواهشا راهنمایی کنید