رمزنگاری و رمزگشایی فایل ها با AES 256 در #C
با سلام خدمت دوستان عزیز
میخواستم برنامه ای رو بنویسیم با #C که توسط یک دکمه یک فایل رو فراخوانی کنه
سپس مقصد فایل رو انتخاب کنیم اونم با یک دکمه دیگر
در آخر با دادن یک کلید فایل را با الگوریتم AES 256 Bit رمزنگاری کنه
سپس با یک دکمه دیگر فایل رمزنگاری شده رو فراخوانی کنه و با دادن کلید فایل رو رمزگشایی کنه
مثل تصویر زیر:
خب حالا دنبال یک آموزش بودم که چه طوری بتونم این کار رو بکنم
تا اینکه اینو پیدا کردم:
حالا نمیدونم چه طوری با سورس کار کنم؟یعنی کدها رو کجا قرار بدم
فایل دمو رو هم دانلود کردم ولی کارش رمزنگاری رشته ها به AES بود نه فایل
ممنون میشم زحمت بکشید این سورس ها در قالب یک پروژه قرار بدید
و لینکش رو به من بدید
سپاس گذارم
3 پاسخ
سلام و درود، لینکی که گذاشتید قسمت پائینش روش Encrypt کردن فایل رو توضیح داده. کدهای لینک ذکر شده رو به صورت یک کلاس درآوردم براتون:
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; } }
برای استفاده از کلاس هم به صورت زیر می تونید فایل ها رو رمزگذاری یا رمزگشایی کنید:
var encManager = new EncryptionManager(); encManager.EncryptFile("D:\\my.txt", "123456", "d:\\my_enc.txt"); encManager.DecryptFile("D:\\my_enc.txt", "123456", "d:\\my.txt");
بسیار ممنون از جناب مهندس احمدی
الان مشکلی نداره که شما بیاین همین کدها رو در قالب یک پروژه c# تو نرم افزار visual studio برترین و آپلودش کنین.
البته اگر اشکال نداره
به هر حال ممنون و سپاس گذارم
خواهش میکنم، امروز اگر فرصت شد یه نمونه ساده آماده میکنم و برای دانلود میزارم.