رمزگذاری و رمزگشایی رشته ها در #C
یکشنبه 7 تیر 1394Encrypt به معنای رمزگذاری و Decrypt به معنای رمز گشایی می باشد. گاهی اوقات برای اهداف محافظتی نیاز به رمزگذاری اطلاعاتمان داریم. در این مقاله با نحوه رمزگذاری و رمزگشایی رشته ها در ASP.NET آشنا خواهیم شد.
مایکروسافت خودش دارای متدهای ساده برای رمزگذاری و رمزگشایی می باشد.
متدهای ساده رمزگذاری و رمزگشایی
string encryptedString = SomeStaticClass.Encrypt(sourceString);
string decryptedString = SomeStaticClass.Decrypt(encryptedString);
برای استفاده از نمونه کد شما می توانید CryptorEngine را به پروژه تان اضافه کنید و برای دسترسی به متدهای رمزگذاری و رمزگشایی از کلاس زیر استفاده نمایید.

کلاس رمزگذاری و رمزگشایی
public string DecryptString(string encrString)
{
byte[] b;
string decrypted;
try
{
b = Convert.FromBase64String(encrString);
decrypted = System.Text.ASCIIEncoding.ASCII.GetString(b);
}
catch (FormatException fe)
{
decrypted = "";
}
return decrypted;
}
public string EnryptString(string strEncrypted)
{
byte[] b = System.Text.ASCIIEncoding.ASCII.GetBytes(strEncrypted);
string encrypted = Convert.ToBase64String(b);
return encrypted;
}

رمزگذاری و رمزگشایی با انتخاب کاراکتر
public string encrypt(string encryptString)
{
string EncryptionKey = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
byte[] clearBytes = Encoding.Unicode.GetBytes(encryptString);
using(Aes encryptor = Aes.Create())
{
Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] {
0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76
});
encryptor.Key = pdb.GetBytes(32);
encryptor.IV = pdb.GetBytes(16);
using(MemoryStream ms = new MemoryStream())
{
using(CryptoStream cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write)) {
cs.Write(clearBytes, 0, clearBytes.Length);
cs.Close();
}
encryptString = Convert.ToBase64String(ms.ToArray());
}
}
return encryptString;
}
public string Decrypt(string cipherText)
{
string EncryptionKey = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
cipherText = cipherText.Replace(" ", "+");
byte[] cipherBytes = Convert.FromBase64String(cipherText);
using(Aes encryptor = Aes.Create())
{
Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] {
0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76
});
encryptor.Key = pdb.GetBytes(32);
encryptor.IV = pdb.GetBytes(16);
using(MemoryStream ms = new MemoryStream())
{
using(CryptoStream cs = new CryptoStream(ms, encryptor.CreateDecryptor(), CryptoStreamMode.Write)) {
cs.Write(cipherBytes, 0, cipherBytes.Length);
cs.Close();
}
cipherText = Encoding.Unicode.GetString(ms.ToArray());
}
}
return cipherText;
}
برای انجام یک نمونه کافی است فرمی با 4 textbox و 2 Button مانند شکل زیر درست کرده و کدهای فوق را در آن کپی کرده و استفاده نمایید.

سپس کدهای فوق را در زیر قسمت Form1_Load در صفحه form1.cs کپی نمایید.
خروجی همانند شکل خواهد شد.

هنگامی که در تکست باکس اول رشته ای وارد کنیم و روی دکمه رمزگذاری کلیک نماییم در تکست باکس دوم رشته رمزگذاری شده نمایان خواهد شد.
حال اگر این رشته را در تکست باکس سوم کپی کنید و روی دکمه رمزگشایی کلیک نماییم خواهیم دید که این رشته همان رشته اول خواهد بود.
از این کلاس ها می توانید در پروژه های خود استفاده نمایید.
- C#.net
- 4k بازدید
- 7 تشکر