From d8e0591dba38c2db3e6d3fd3a7b8c6aba676fab3 Mon Sep 17 00:00:00 2001 From: dylan_banta Date: Thu, 27 Feb 2025 11:06:57 -0500 Subject: [PATCH] Updated to use AES encryption for better security --- .gitignore | 3 +- ...d19558e7-9a35-45c3-bb5c-9512209306da.vsidx | Bin 0 -> 84766 bytes .vs/Send2Email/v17/.suo | Bin 43520 -> 52736 bytes SendEmail/Form2.cs | 4 +- SendEmail/Form3.cs | 8 +- SendEmail/Program.cs | 106 ++++++++---------- 6 files changed, 54 insertions(+), 67 deletions(-) create mode 100644 .vs/Send2Email/FileContentIndex/d19558e7-9a35-45c3-bb5c-9512209306da.vsidx diff --git a/.gitignore b/.gitignore index 29c1e61..fa59f04 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -SendEmail/bin/SendEmail/obj/ +SendEmail/bin/ +SendEmail/obj/ diff --git a/.vs/Send2Email/FileContentIndex/d19558e7-9a35-45c3-bb5c-9512209306da.vsidx b/.vs/Send2Email/FileContentIndex/d19558e7-9a35-45c3-bb5c-9512209306da.vsidx new file mode 100644 index 0000000000000000000000000000000000000000..86368e4131d0dc81a094b58fbfe9f2c113721045 GIT binary patch literal 84766 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 T4RMbk+mg3ixEd{9{o(i*RecCW delta 3735 zcmeHJZETy>6@IV3>ZY$#Cw9JQN=zF}NbKfy;;*D1Nt2YO$!cdyS0O%xo!9}|^n=D8 zU5XaBNCQgMwLWa+2S`;rX%d69<`oP!#)=9Eq(TY;39`?dZ5x_M^1}*i{s{^Qwhjv_5t^(U&)kmpdDu+;$m`X@iDz%z)}a zlXt*NV2?;o#Z}%tFV0(1f0Krc|#o}ceS zn~#a7-d4hA`5^i~0(Js1APx)xKL&oHC?;i??y^QsCvy3+M(S5pdcitgNTfvGnGq`} z>x`?sLEZ#glL0sD%n2K1D`E~|c*BsXd=4B%O#frCpFT4Cq}5^j1}GS#Xwf2FHV3TI z2F{=7sC^+e&$?6>r;X#`V@8YoM>3VgH16>@aYz?xI z1C+-b8rJ8~vCv##N(AZWZG+So&}g;|OJI#HG#n;)0m28-Cx+b^cf6m2Rbj)T>Ff@sf2xgHYj8|8^wX1@Yd?J-hYU5 z$8R$oTV^WO9``Og=j0+IQ?<*^HVuX`f6EauPFY`E)ga`oGZbjnH>7eQW(E`6wY7lp z?JAn|?{LUG=G-@gD(`QScMi%o_o;mMl~F3whNhLT-z_v(GpI7lxY(tU z2FljPsJHH6^35gGLm%b%-OU^32faS-RMTl6obcf*l;Yw)?H8v6%a7Z3kXhTM*_zwBb zU=EX9!z}7QceqF|GBZo{-!AJvg!vO)eCc3MpW#iRnH;WhbU65#?w{dkQ0N(72VH7v z;;>#M>D`6i-06LveSTnO;>atL|8D=}`Ay{X2UWflcy1|v~V{4dJcYd>yuU7$>>Eq58UWr17H`c@P zKFW2f`jw4W1i34l^h=xVfR=F z3L2NN##AU3Z66Iq{NYeK=nqB$BmQVI67g$o!9ZJ^)}9PULuTc7l$;o_jdnhiok;85 z>$_pADO z!mm$EkJ3<~oc>if^+UbfP5+!egv6=V%k;zMe7yR$UXP5XLg{cv+CMU;CH+Bdtlb|C zwU7Ce!Ld+43y%fD(dhSh{d{hlSe~Hw4(HD_mH7EPOTN%giPtOjzrAS_bm*-FUHii+ z{qwh+0yj8&dyQgQ!Z+(LMD iF`X4co`s&cc(!8IK}>f*zWHkDy}ey@b+3ltxBmx+FPmQg diff --git a/SendEmail/Form2.cs b/SendEmail/Form2.cs index 36194b3..bad855b 100644 --- a/SendEmail/Form2.cs +++ b/SendEmail/Form2.cs @@ -27,8 +27,8 @@ namespace SendEmail private void PassButtonClick(object sender, EventArgs e) { string input = textBox1.Text; - string encryptedInput = Program.Encrypt(input); // Encrypt the user input - if (encryptedInput == Program.config_pass) // If encrypted password is correct + string decryptedConfigPass = Program.Decrypt(Program.config_pass); + if (input == decryptedConfigPass) { this.Hide(); // Hide Form2 var form3 = new Form3(); // Create Form3 diff --git a/SendEmail/Form3.cs b/SendEmail/Form3.cs index 868616a..36c09d4 100644 --- a/SendEmail/Form3.cs +++ b/SendEmail/Form3.cs @@ -132,10 +132,8 @@ namespace SendEmail int cfg_port = Int32.Parse(string_cfg_port); - string cfg_public_key = Program.key_public; // Get public key - // Create a JSON object with the configuration data - Config cfg = new Config(cfg_host, cfg_port, cfg_user, cfg_pass, cfg_from, cfg_subject, cfg_body, cfg_extensions, cfg_config_pass, cfg_public_key); + Config cfg = new Config(cfg_host, cfg_port, cfg_user, cfg_pass, cfg_from, cfg_subject, cfg_body, cfg_extensions, cfg_config_pass); // Serialize the JSON data so it can be written to a text file string[] json = { JsonConvert.SerializeObject(cfg, Formatting.Indented) }; @@ -202,7 +200,6 @@ namespace SendEmail Program.config_pass = config.Config_Pass; Program.file_extensions = config.File_Extensions; - Program.key_public = config.Key_Public; // Load public key return true; } @@ -274,7 +271,7 @@ namespace SendEmail public string File_Extensions { get; set; } public string Key_Public { get; set; } // New property - public Config(string smtp_host, int smtp_port, string smtp_user, string smtp_pass, string mail_from, string mail_subject, string mail_body, string file_extensions, string config_pass, string key_public) + public Config(string smtp_host, int smtp_port, string smtp_user, string smtp_pass, string mail_from, string mail_subject, string mail_body, string file_extensions, string config_pass) { SMTP_Host = smtp_host; SMTP_Port = smtp_port; @@ -287,7 +284,6 @@ namespace SendEmail File_Extensions = file_extensions; Config_Pass = config_pass; - Key_Public = key_public; // New property } } #endregion diff --git a/SendEmail/Program.cs b/SendEmail/Program.cs index a39c80e..c04c007 100644 --- a/SendEmail/Program.cs +++ b/SendEmail/Program.cs @@ -6,6 +6,7 @@ using System.Globalization; using System.Text.RegularExpressions; using System.Collections.Generic; using System.Security.Cryptography; +using System.Text; namespace SendEmail { @@ -36,8 +37,8 @@ namespace SendEmail public static string config_pass; // Encryption keys (8 bytes for DES) - public static string key_secret = "8byteKey"; - public static string key_public; // Moved to config file + public static string EncryptionKey = "8byteKey"; + #endregion #region Main Method @@ -72,77 +73,66 @@ namespace SendEmail #endregion #region Encryption Methods - public static string Encrypt(string input) + public static string Encrypt(string plainText) { - try - { - string textToEncrypt = input; - string ToReturn = ""; - byte[] secretkeyByte = System.Text.Encoding.UTF8.GetBytes(key_secret); - byte[] publickeybyte = System.Text.Encoding.UTF8.GetBytes(key_public); - byte[] inputbyteArray = System.Text.Encoding.UTF8.GetBytes(textToEncrypt); + if (string.IsNullOrEmpty(plainText)) + return string.Empty; - using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()) + using (Aes aes = Aes.Create()) + { + aes.Key = DeriveKey(EncryptionKey); + aes.GenerateIV(); // Generate a unique IV + + using (var encryptor = aes.CreateEncryptor(aes.Key, aes.IV)) + using (var ms = new MemoryStream()) { - des.Mode = CipherMode.CBC; - des.Padding = PaddingMode.PKCS7; - des.Key = publickeybyte; - des.IV = secretkeyByte; - - using (MemoryStream ms = new MemoryStream()) + ms.Write(aes.IV, 0, aes.IV.Length); // Store IV at the start + using (var cryptoStream = new CryptoStream(ms, encryptor, CryptoStreamMode.Write)) + using (var writer = new StreamWriter(cryptoStream)) { - using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write)) - { - cs.Write(inputbyteArray, 0, inputbyteArray.Length); - cs.FlushFinalBlock(); - ToReturn = Convert.ToBase64String(ms.ToArray()); - } + writer.Write(plainText); } + return Convert.ToBase64String(ms.ToArray()); } - - return ToReturn; - } - catch (Exception ex) - { - throw new Exception(ex.Message, ex.InnerException); } } - public static string Decrypt(string input) + + public static string Decrypt(string encryptedText) { - try - { - string textToDecrypt = input; - string ToReturn = ""; - byte[] privatekeyByte = System.Text.Encoding.UTF8.GetBytes(key_secret); - byte[] publickeybyte = System.Text.Encoding.UTF8.GetBytes(key_public); - byte[] inputbyteArray = Convert.FromBase64String(textToDecrypt.Replace(" ", "+")); + if (string.IsNullOrEmpty(encryptedText)) + return string.Empty; - using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()) + byte[] cipherTextBytes = Convert.FromBase64String(encryptedText); + using (Aes aes = Aes.Create()) + { + aes.Key = DeriveKey(EncryptionKey); + byte[] iv = new byte[aes.BlockSize / 8]; + + if (cipherTextBytes.Length < iv.Length) + return string.Empty; // Prevents IV-related decryption errors + + Array.Copy(cipherTextBytes, iv, iv.Length); // Extract stored IV + + using (var decryptor = aes.CreateDecryptor(aes.Key, iv)) + using (var ms = new MemoryStream(cipherTextBytes, iv.Length, cipherTextBytes.Length - iv.Length)) + using (var cryptoStream = new CryptoStream(ms, decryptor, CryptoStreamMode.Read)) + using (var reader = new StreamReader(cryptoStream)) { - des.Mode = CipherMode.CBC; - des.Padding = PaddingMode.PKCS7; - des.Key = publickeybyte; - des.IV = privatekeyByte; - - using (MemoryStream ms = new MemoryStream()) - { - using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write)) - { - cs.Write(inputbyteArray, 0, inputbyteArray.Length); - cs.FlushFinalBlock(); - ToReturn = System.Text.Encoding.UTF8.GetString(ms.ToArray()); - } - } + return reader.ReadToEnd(); } - - return ToReturn; - } - catch (Exception ae) - { - throw new Exception(ae.Message, ae.InnerException); } } + + private static byte[] DeriveKey(string passphrase) + { + using (SHA256 sha256 = SHA256.Create()) + { + return sha256.ComputeHash(Encoding.UTF8.GetBytes(passphrase)); + } + } + + #endregion #region Email Methods