encrypt و decrypt رشته در C# - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

encrypt و decrypt رشته در C#

+2 امتیاز
سلام دوستان.آیا توابع یا کلاس هایی وجود داره که بتونم بوسیله آنها رشته را encrypt و decrypt کنم. خواهشاً سریع جواب بدید گیرم.
 
 
پیشاپیش ممنون
سوال شده بهمن 18, 1392  بوسیله ی MeranPour (امتیاز 14)   1 1 1
دوباره تگ گذاری شد اسفند 25, 1392 بوسیله ی BlueBlade

2 پاسخ

+3 امتیاز
 
بهترین پاسخ

سلام.

تا جایی که من اطلاع دارم روش های متداولی که برای encrypt کردن یه رشته استفاده میشه، قابلیت برگشت (decrypt) رو ندارند.

مگر اینکه خودتون شخصا اقدام به تولید یه روش encrypt کنید که از ماهیت و نحوه encrypt باخبر باشید تا بتونید رشته رو دوباره decrypt کنید.

اگر فرض بگیریم منظور شما فقط Encrypt کردن بوده می تونید ادامه مطالب رو مطالعه بفرمایید.

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

ساده ترین روش برای این کار استفاده از متد GetHashCode() هست که بسادگی قابل استفاده هست (و البته کمتر کسی از اون استفاده میکنه) :

برای تست کردن، 3 تا textbox بذارید و اسم اونها رو TxtInput  و TxtResult  و TxtRepeatInput بذارید.

برای Encrypt کردن رشته مورد نظر :

TxtResult.Text = TxtInput.Text.GetHashCode().ToString();

و بعد از encrypt کردن زمانیکه میخواید رشته ورودی رو با رشته encrypt شده مقایشه کنید، دوباره باید رشته ورودی رو encrypt کنید و با رشته ذخیره شده مقایسه کنید :

if (TxtRepeatInput.Text.GetHashCode() == TxtResult.Text)
MessageBox.Show("equal");
     else
          MessageBox.Show("not equal");

-----------------------------------------------------------------------------

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

برای این کار ابتدا یه متد بصورت زیر ایجاد کنید (می تونید این متد رو در قالب یه کلاس و بصورت یه dll در بیارید تا مطمئن تر بتونید از اون استفاده کنید) . این متد یک رشته بعنوان ورودی میگیره و یه رشته encrypt شده رو برمیگردونه :

public string MD5Hash(string text)
        {
            MD5 md5 = new MD5CryptoServiceProvider();

            //compute hash from the bytes of text
            md5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(text));

            //get hash result after compute it
            byte[] result = md5.Hash;

            StringBuilder strBuilder = new StringBuilder();
            for (int i = 0; i < result.Length; i++)
            {
                strBuilder.Append(result[i].ToString("x2"));
            }

            return strBuilder.ToString();
        }

برای استفاده هم می تونید به این شکل استفاده کنید :

TxtResult.Text = MD5Hash(TxtInput.Text);

و بعد از Encrypt کردن و برای مقایسه رشته ورودی با رشته ذخیره شده (رشته encrypt شده )، دوباره باید رشته ورودی رو encrypt کنید :

if (MD5Hash(TxtRepeatInput.Text) == TxtResult.Text)
                MessageBox.Show("ok");
            else
                MessageBox.Show("no");

روش های دیگه ای هم مثل SHA256 و ... هست که می تونید با جستجوی ساده به اونها دسترسی پیدا کنید.

پاسخ داده شده بهمن 18, 1392 بوسیله ی veniz2008 (امتیاز 2,083)   1 5 21
انتخاب شد بهمن 19, 1392 بوسیله ی MeranPour
+3 امتیاز
بله.بسیار زیاد.

برای این کار اول باید رشته خود را تبدیل به byte[] کنید.برای این کار با توجه به Encoding مورد نیازتون از یکی از موارد موجود در  System.Text.Encoding استفاده کنید.

سپس آرایه به وجود آمده رو با کلاسهای موجود در System.Security.Cryptography مثل Rijendael,Des3,Aes,AesManaged,... با توجه به نزیارتون رمزنگاری کرده و برگردونید.

این کار برای انواع ورودی مختلف و نوع ذخیره سازی و نوع دسترسی پیشبینی شده به اشکال مختلف صورت میگیرد.که برای انجام دادن صحیح آن باید دید درست و کاملی از روش کار و  نقاط ضعف و قوت همه این روشها داشته باشید.

برای اصلاعات بیشتر مقالات مربوط به کلاسهای این namespace(System.Security.Cryptography) را در MSDN بخوانید
پاسخ داده شده بهمن 18, 1392 بوسیله ی FastCode (امتیاز 602)   1 2 11
...