آموزش رمزگذاری AES در سی شارپ
سلام دوستان در این سری از آموزش برنامه نویسی سی شارپ به آموزش رمزگذاری AES در سی شارپ می پردازیم پیرو مطلب قبلی که در مورد رمز گذاری در اندروید پرداختیم امروز می خواهیم نوع سی شارپ آن را نیز مثال بزنیم رمز نگاری در برنامه بسیار مهم است چون همیشه افردای هستند که به دنبال باگ در برنامه هستند در ادامه با ما همراه باشید.
از using های زیر استفاده کنید.
1 2 | using System.Security.Cryptography; using System.IO; |
Encryption یا رمزنگاری
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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 یا رمزگشایی
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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
1 2 3 4 5 6 7 8 9 | 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; } |
1 2 3 4 5 6 7 8 9 | 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; } |
شاید دوستان بخواهند فایل را نیز فشرده کنند برای اینکار می تونید از کد های زیر استفاده کنید.
Encrypt
1 2 3 4 5 6 7 8 9 10 11 | 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); } |
1 2 3 4 5 6 7 8 9 10 11 | 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); } |
این آموزش هم به پایان رسید.
موفق و موید باشید.
ممنون از اینکه به درخواستهای کاربرها اهمیت میدین.
خیلی مطلب مهمی هست برای ارتباط بین اپلیکیشن و وب سرویس
بله درسته خواهش می کنم موفق باشید.
سپاس از شما
خواهش می کنم.
واقعا دمت گرم. هیچ جا همچین کد کاملی ندیدم واسه اینکار
موفق باشید.
سلام . خیلی ممنون از شما.
فقط یه سوال دارم. در گفتید “ویود ها هرکدام دو مقدار ورودی دارد که اولی string است که می خواهید کد شود و دومی کلید شما است.”
میشه بیشتر توضیح بدید.
ممنون
سلام کلید منظور کدی که برای رمزگذاری می خواهد مورد استفاده قرار گیرد .
موفق باشید.
سلام. ممنون از کد مفید و کاربردیتون
در توضیحاتتون گفته بودید که : “ویود ها هرکدام دو مقدار ورودی دارد که اولی string است که می خواهید کد شود و دومی کلید شما است.”
فقط لطفا در مورد دو تا ورودی وُیود بیشتر توضیح بدید. اگه ورودی دوم، پسوردیه که قراره هش بشه، string ی که می خوایم کد بشه ، چیه؟
ممنون
سلام
میشه توضیح بدید که چطور میتونم متنی که در یک textbox نوشته شده به وسیله این کد ها رمز کنم؟
و اینکه امکانش هست در مراحل بعدی،متن رمز شده رو در پایگاه داده ذخیره کنم و با متن خای ورودی مقایسه کنم؟
سلام
ببیند شما مقدار textbox رو دریافت کنید به ورودی تابع بفرستید چیز سختی نیست و برای ذخیره در پایگاه داده مثل یک String با آن رفتار کنید خروجی تابع نیز string است پس به راحتی می توانید آن را ذخیره کنید و بررسی که می خواهید رو انجام بدید.
با سلام. دستتون درد نکنه.
اگر بخوایم از این الگوریتم در اندروید استفاده کنیم آیا مثالی ازش دارید؟ من میخوام اطلاعات رو در اپلیکیشن اندروید کد کنم و از طریق API بفرستم سمت سرور و با mvc دیکود کنم. ممنون میشم اگر برای اندروید هم مثالی بهم بدید
با تشکر
سلام و درود این آموزش درباره اندروید نیز قرار گرفته است لینک های زیر را بررسی کنید
آموزش رمزگذاری (Encryption) در اندروید
https://programchi.ir/2017/08/20/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%B1%D9%85%D8%B2%DA%AF%D8%B0%D8%A7%D8%B1%DB%8C-encryption-%D8%AF%D8%B1-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF/
آموزش رمزگذاری (Encryption) بروی ویدیو در اندروید
http://programchi.ir/?s=%D8%B1%D9%85%D8%B2%DA%AF%D8%B0%D8%A7%D8%B1%DB%8C
آموزش رمزگذاری AESCrypt در برنامه نویسی اندروید
https://programchi.ir/2017/08/08/%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%d8%b1%d9%85%d8%b2%da%af%d8%b0%d8%a7%d8%b1%db%8c-aescrypt-%d8%af%d8%b1-%d8%a8%d8%b1%d9%86%d8%a7%d9%85%d9%87-%d9%86%d9%88%db%8c%d8%b3%db%8c-%d8%a7%d9%86%d8%af%d8%b1%d9%88/
موفق باشید.
بسیار ممنونم
عالی بود
فقط یه سوال
مثلا روزی من بتونم یه الگوریتم رمزنگاری درست کنم درصورتیکه چنین الگورتیم هایی هستن ایا اینکار بیهوده نیست؟
چون قبل از من هم کسانی اینکارو کردن دیگه
سلام
بله شما می تونید شما هم درست کنید.
باسلام خسته نباشید بنده باید یه پروژه انجام بدم که شرحش به این صورت است برنامه ای باید بنویسم که در یک پوشه دنبال فایل های تصویری بگردد وآن هارا با الگوریتم AESرمزنگاری نماید این برنامه باید دارای قابلیت رمزگشایی نیز باشد شما میتونید راهنمایی کنید بندعه رو ممنون میشم