@@ -521,22 +521,45 @@ public class CryptoUtils
521521{
522522 public string Encrypt(string data, string key)
523523 {
524- byte[] dataBytes = System.Text.Encoding.UTF8.GetBytes(data);
525- byte[] keyBytes = System.Text.Encoding.UTF8.GetBytes(key);
526-
527- using (AesCryptoServiceProvider aesCryptoProvider = new AesCryptoServiceProvider())
524+ string Result = "";
525+ byte[] keyBytes = Encoding.UTF8.GetBytes(key);
526+ byte[] dataBytes = Encoding.UTF8.GetBytes(data);
527+
528+ using (var aes = Aes.Create())
528529 {
529- aesCryptoProvider.Key = keyBytes;
530- aesCryptoProvider.Mode = CipherMode.CBC;
531- aesCryptoProvider.Padding = PaddingMode.PKCS7;
532-
533- ICryptoTransform encryptor = aesCryptoProvider.CreateEncryptor();
534- byte[] encryptedData = encryptor.TransformFinalBlock(dataBytes, 0, dataBytes.Length);
535- encryptor.Dispose();
536- aesCryptoProvider.Clear();
530+ aes.Key = keyBytes;
531+ aes.Mode = CipherMode.CBC; //Better security
532+ aes.Padding = PaddingMode.PKCS7;
533+
534+ aes.GenerateIV(); //Generate a random IV (Init Vector) for each encryption
535+
536+ using var encryptor = aes.CreateEncryptor();
537+ Result = Convert.ToBase64String(aes.IV.Concat(encryptor.TransformFinalBlock(dataBytes, 0, dataBytes.Length)).ToArray());
538+ }
539+
540+ return Result;
541+ }
537542
538- return Convert.ToBase64String(encryptedData);
543+ public string Decrypt(string encryptedData, string key)
544+ {
545+ string Result = "";
546+ byte[] keyBytes = Encoding.UTF8.GetBytes(key);
547+ byte[] encryptedBytesWithIV = Convert.FromBase64String(encryptedData);
548+
549+ using (var aes = Aes.Create())
550+ {
551+ aes.Key = keyBytes;
552+ aes.Mode = CipherMode.CBC; //Better security
553+ aes.Padding = PaddingMode.PKCS7;
554+
555+ //Extract IV from the encrypted data
556+ aes.IV = encryptedBytesWithIV.Take(aes.BlockSize / 8).ToArray(); //Set IV for decryption
557+ byte[] encryptedBytes = encryptedBytesWithIV.Skip(aes.BlockSize / 8).ToArray();
558+
559+ using var decryptor = aes.CreateDecryptor();
560+ Result = Encoding.UTF8.GetString(decryptor.TransformFinalBlock(encryptedBytes, 0, encryptedBytes.Length));
539561 }
562+ return Result;
540563 }
541564}
542565```
0 commit comments