رمزگذاری و رمزگشایی رشته ها در #C

یکشنبه 7 تیر 1394

Encrypt به معنای رمزگذاری و Decrypt به معنای رمز گشایی می باشد. گاهی اوقات برای اهداف محافظتی نیاز به رمزگذاری اطلاعاتمان داریم. در این مقاله با نحوه رمزگذاری و رمزگشایی رشته ها در ASP.NET آشنا خواهیم شد.

رمزگذاری و رمزگشایی رشته ها در #C

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

متدهای ساده رمزگذاری و رمزگشایی

    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 کپی نمایید.

خروجی همانند شکل خواهد شد.

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

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

از این کلاس ها می توانید در پروژه های خود استفاده نمایید.

آموزش سی شارپ

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • C#.net
  • 4k بازدید
  • 7 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید