آموزش رمزگذاری AES در سی شارپ

سلام دوستان در این سری از آموزش برنامه نویسی سی شارپ به آموزش رمزگذاری AES در سی شارپ می پردازیم پیرو مطلب قبلی که در مورد رمز گذاری در اندروید پرداختیم امروز می خواهیم نوع سی شارپ آن را نیز مثال بزنیم رمز نگاری در برنامه بسیار مهم است چون همیشه افردای هستند که به دنبال باگ در برنامه هستند در ادامه با ما همراه باشید.
از using های زیر استفاده کنید.

using System.Security.Cryptography;
using System.IO;

Encryption یا رمزنگاری

public byte[] AES_Encrypt(byte[] bytesToBeEncrypted, byte[] passwordBytes)
{
    byte[] encryptedBytes = null;
    byte[] saltBytes = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
    using (MemoryStream ms = new MemoryStream())
    {
        using (RijndaelManaged AES = new RijndaelManaged())
        {
            AES.KeySize = 256;
            AES.BlockSize = 128;
            var key = new Rfc2898DeriveBytes(passwordBytes, saltBytes, 1000);
            AES.Key = key.GetBytes(AES.KeySize / 8);
            AES.IV = key.GetBytes(AES.BlockSize / 8);
            AES.Mode = CipherMode.CBC;
            using (var cs = new CryptoStream(ms, AES.CreateEncryptor(), CryptoStreamMode.Write))
            {
                cs.Write(bytesToBeEncrypted, 0, bytesToBeEncrypted.Length);
                cs.Close();
            }
            encryptedBytes = ms.ToArray();
        }
    }
    return encryptedBytes;
}

کد بالا رمزگذاری را انجام می دهد

Decryption یا رمزگشایی

public byte[] AES_Decrypt(byte[] bytesToBeDecrypted, byte[] passwordBytes)
{
    byte[] decryptedBytes = null;
    byte[] saltBytes = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
    using (MemoryStream ms = new MemoryStream())
    {
        using (RijndaelManaged AES = new RijndaelManaged())
        {
            AES.KeySize = 256;
            AES.BlockSize = 128;
            var key = new Rfc2898DeriveBytes(passwordBytes, saltBytes, 1000);
            AES.Key = key.GetBytes(AES.KeySize / 8);
            AES.IV = key.GetBytes(AES.BlockSize / 8);
            AES.Mode = CipherMode.CBC;
            using (var cs = new CryptoStream(ms, AES.CreateDecryptor(), CryptoStreamMode.Write))
            {
                cs.Write(bytesToBeDecrypted, 0, bytesToBeDecrypted.Length);
                cs.Close();
            }
            decryptedBytes = ms.ToArray();
        }
    }
    return decryptedBytes;
}

خب حالا باید دو تا void درست کنیم تا Encrypt و Decrypt را ساده تر برامون انجام دهند.
ابتدا void مربوط به Encrypt

public string EncryptText(string input, string password)
{
    byte[] bytesToBeEncrypted = Encoding.UTF8.GetBytes(input);
    byte[] passwordBytes = Encoding.UTF8.GetBytes(password);
    passwordBytes = SHA256.Create().ComputeHash(passwordBytes);
    byte[] bytesEncrypted = AES_Encrypt(bytesToBeEncrypted, passwordBytes);
    string result = Convert.ToBase64String(bytesEncrypted);
    return result;
}

سپس void دوم یا Decrypt همانند زیر می شود.

public string DecryptText(string input, string password)
{
    byte[] bytesToBeDecrypted = Convert.FromBase64String(input);
    byte[] passwordBytes = Encoding.UTF8.GetBytes(password);
    passwordBytes = SHA256.Create().ComputeHash(passwordBytes);
    byte[] bytesDecrypted = AES_Decrypt(bytesToBeDecrypted, passwordBytes);
    string result = Encoding.UTF8.GetString(bytesDecrypted);
    return result;
}

نحوه استفاده از آن هم بسیار ساده است ویود ها هرکدام دو مقدار ورودی دارد که اولی string است که می خواهید کد شود و دومی کلید شما است.
شاید دوستان بخواهند فایل را نیز فشرده کنند برای اینکار می تونید از کد های زیر استفاده کنید.
Encrypt

public void EncryptFile()
{
    string file = "C:\\SampleFile.DLL";
    string password = "abcd1234";
    byte[] bytesToBeEncrypted = File.ReadAllBytes(file);
    byte[] passwordBytes = Encoding.UTF8.GetBytes(password);
    passwordBytes = SHA256.Create().ComputeHash(passwordBytes);
    byte[] bytesEncrypted = AES_Encrypt(bytesToBeEncrypted, passwordBytes);
    string fileEncrypted = "C:\\SampleFileEncrypted.DLL";
    File.WriteAllBytes(fileEncrypted, bytesEncrypted);
}

Decrypt

public void DecryptFile()
{
    string fileEncrypted = "C:\\SampleFileEncrypted.DLL";
    string password = "abcd1234";
    byte[] bytesToBeDecrypted = File.ReadAllBytes(fileEncrypted);
    byte[] passwordBytes = Encoding.UTF8.GetBytes(password);
    passwordBytes = SHA256.Create().ComputeHash(passwordBytes);
    byte[] bytesDecrypted = AES_Decrypt(bytesToBeDecrypted, passwordBytes);
    string file = "C:\\SampleFile.DLL";
    File.WriteAllBytes(file, bytesDecrypted);
}

 
این آموزش هم به پایان رسید.
 
موفق و موید باشید.

مطالعه بیشتر