TizzyT

AES128 -TizzyT

Oct 21st, 2018
514
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.19 KB | None | 0 0
  1.     public class AES128 : IDisposable
  2.     {
  3.         public readonly ICryptoTransform Encryptor, Decryptor;
  4.  
  5.         public AES128()
  6.         {
  7.             using (AesCryptoServiceProvider aes = new AesCryptoServiceProvider())
  8.             {
  9.                 aes.GenerateKey();
  10.                 aes.GenerateIV();
  11.                 aes.Mode = CipherMode.CBC;
  12.                 aes.Padding = PaddingMode.None;
  13.                 Encryptor = aes.CreateEncryptor();
  14.                 Decryptor = aes.CreateDecryptor();
  15.             }
  16.         }
  17.  
  18.         public AES128(byte[] Parameters)
  19.         {
  20.             if (Parameters?.Length == 32)
  21.             {
  22.                 using (AesCryptoServiceProvider aes = new AesCryptoServiceProvider())
  23.                 {
  24.                     aes.Key = SubArray(Parameters, 0, 16);
  25.                     aes.IV = SubArray(Parameters, 16, 16);
  26.                     aes.Mode = CipherMode.CBC;
  27.                     aes.Padding = PaddingMode.None;
  28.                     Encryptor = aes.CreateEncryptor();
  29.                     Decryptor = aes.CreateDecryptor();
  30.                 }
  31.             }
  32.             else
  33.             {
  34.                 throw new ArgumentException("'Parameters' is Invalid, must be a 32 byte array.");
  35.             }
  36.         }
  37.  
  38.         public byte[] Encrypt(byte[] Data)
  39.         {
  40.             byte[] r = new byte[(int)(Math.Ceiling((Data.Length + 1) / 16.0) * 16)];
  41.             Array.Copy(Data, 0, r, 0, Data.Length);
  42.             r[r.Length - 1] = (byte)(r.Length - Data.Length);
  43.             Encryptor.TransformBlock(r, 0, r.Length, r, 0);
  44.             return r;
  45.         }
  46.  
  47.         public byte[] Decrypt(byte[] Data)
  48.         {
  49.             byte[] r = (byte[])Data.Clone();
  50.             Decryptor.TransformBlock(r, 0, r.Length, r, 0);
  51.             return SubArray(r, 0, r.Length - r[r.Length - 1]);
  52.         }
  53.  
  54.         private static byte[] SubArray(byte[] arr, in int offset, in int length)
  55.         {
  56.             byte[] result = new byte[length];
  57.             Array.Copy(arr, offset, result, 0, length);
  58.             return result;
  59.         }
  60.  
  61.         public void Dispose()
  62.         {
  63.             Encryptor.Dispose();
  64.             Decryptor.Dispose();
  65.         }
  66.     }
Advertisement
Add Comment
Please, Sign In to add comment