50٪ تخفیف روی تمام دوره‌ها!
پایان تخفیف تا:
مشاهده دوره‌ها
0

رمزنگاری و رمزگشایی فایل ها با AES 256 در #C

با سلام خدمت دوستان عزیز

میخواستم برنامه ای رو بنویسیم با #C که توسط یک دکمه یک فایل رو فراخوانی کنه

سپس مقصد فایل رو انتخاب کنیم اونم با یک دکمه دیگر

در آخر با دادن یک کلید فایل را با الگوریتم AES 256 Bit رمزنگاری کنه

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

مثل تصویر زیر:

با سلام خدمت دوستان عزیز

میخواستم برنامه ای رو بنویسیم با #C که توسط یک دکمه یک فایل رو فراخوانی کنه
سپس مقصد فایل رو انتخاب کنیم اونم با یک دکمه دیگر

در آخر با دادن یک کلید فایل را با الگوریتم AES 256 Bit رمزنگاری کنه

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

مثل تصویر زیر:

||http://tosinso.com/files/get/073a2ef1-3e16-46d8-852d-3a05891b0e9e||

خب حالا دنبال یک آموزش بودم که چه طوری بتونم این کار رو بکنم

تا اینکه اینو پیدا کردم:

|رمزنگاری با AES در #C::https://www.codeproject.com/articles/769741/csharp-aes-bits-encryption-library-with-salt|

حالا نمیدونم چه طوری با سورس کار کنم؟یعنی کدها رو کجا قرار بدم

فایل دمو رو هم دانلود کردم ولی کارش رمزنگاری رشته ها به AES بود نه فایل

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

و لینکش رو به من بدید

سپاس گذارم

خب حالا دنبال یک آموزش بودم که چه طوری بتونم این کار رو بکنم

تا اینکه اینو پیدا کردم:

رمزنگاری با AES در #C

حالا نمیدونم چه طوری با سورس کار کنم؟یعنی کدها رو کجا قرار بدم

فایل دمو رو هم دانلود کردم ولی کارش رمزنگاری رشته ها به AES بود نه فایل

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

و لینکش رو به من بدید

سپاس گذارم

پرسیده شده در 1395/09/27 توسط

3 پاسخ

2

سلام و درود، لینکی که گذاشتید قسمت پائینش روش Encrypt کردن فایل رو توضیح داده. کدهای لینک ذکر شده رو به صورت یک کلاس درآوردم براتون:

Code
    public class EcryptionManager
    {
        public void EncryptFile(string file, string password, string output)
        {
            byte[] bytesToBeEncrypted = File.ReadAllBytes(file);
            byte[] passwordBytes = Encoding.UTF8.GetBytes(password);

            // Hash the password with SHA256
            passwordBytes = SHA256.Create().ComputeHash(passwordBytes);

            byte[] bytesEncrypted = AES_Encrypt(bytesToBeEncrypted, passwordBytes);

            File.WriteAllBytes(output, bytesEncrypted);
        }

        public void DecryptFile(string file, string password, string output)
        {

            byte[] bytesToBeDecrypted = File.ReadAllBytes(file);
            byte[] passwordBytes = Encoding.UTF8.GetBytes(password);
            passwordBytes = SHA256.Create().ComputeHash(passwordBytes);

            byte[] bytesDecrypted = AES_Decrypt(bytesToBeDecrypted, passwordBytes);

            File.WriteAllBytes(output, bytesDecrypted);
        }

        private byte[] AES_Encrypt(byte[] bytesToBeEncrypted, byte[] passwordBytes)
        {
            byte[] encryptedBytes = null;

            // Set your salt here, change it to meet your flavor:
            // The salt bytes must be at least 8 bytes.
            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;
        }

        private byte[] AES_Decrypt(byte[] bytesToBeDecrypted, byte[] passwordBytes)
        {
            byte[] decryptedBytes = null;

            // Set your salt here, change it to meet your flavor:
            // The salt bytes must be at least 8 bytes.
            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;
        }
    }

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

Code
var encManager = new EncryptionManager();

encManager.EncryptFile("D:\\my.txt", "123456", "d:\\my_enc.txt");
encManager.DecryptFile("D:\\my_enc.txt", "123456", "d:\\my.txt");
پاسخ در 1395/09/28 توسط
0

بسیار ممنون از جناب مهندس احمدی

الان مشکلی نداره که شما بیاین همین کدها رو در قالب یک پروژه c# تو نرم افزار visual studio برترین و آپلودش کنین.

البته اگر اشکال نداره

به هر حال ممنون و سپاس گذارم

پاسخ در 1395/09/28 توسط
3

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

پاسخ در 1395/09/28 توسط

پاسخ شما