Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class AES128 : IDisposable
- {
- public readonly ICryptoTransform Encryptor, Decryptor;
- public AES128()
- {
- using (AesCryptoServiceProvider aes = new AesCryptoServiceProvider())
- {
- aes.GenerateKey();
- aes.GenerateIV();
- aes.Mode = CipherMode.CBC;
- aes.Padding = PaddingMode.None;
- Encryptor = aes.CreateEncryptor();
- Decryptor = aes.CreateDecryptor();
- }
- }
- public AES128(byte[] Parameters)
- {
- if (Parameters?.Length == 32)
- {
- using (AesCryptoServiceProvider aes = new AesCryptoServiceProvider())
- {
- aes.Key = SubArray(Parameters, 0, 16);
- aes.IV = SubArray(Parameters, 16, 16);
- aes.Mode = CipherMode.CBC;
- aes.Padding = PaddingMode.None;
- Encryptor = aes.CreateEncryptor();
- Decryptor = aes.CreateDecryptor();
- }
- }
- else
- {
- throw new ArgumentException("'Parameters' is Invalid, must be a 32 byte array.");
- }
- }
- public byte[] Encrypt(byte[] Data)
- {
- byte[] r = new byte[(int)(Math.Ceiling((Data.Length + 1) / 16.0) * 16)];
- Array.Copy(Data, 0, r, 0, Data.Length);
- r[r.Length - 1] = (byte)(r.Length - Data.Length);
- Encryptor.TransformBlock(r, 0, r.Length, r, 0);
- return r;
- }
- public byte[] Decrypt(byte[] Data)
- {
- byte[] r = (byte[])Data.Clone();
- Decryptor.TransformBlock(r, 0, r.Length, r, 0);
- return SubArray(r, 0, r.Length - r[r.Length - 1]);
- }
- private static byte[] SubArray(byte[] arr, in int offset, in int length)
- {
- byte[] result = new byte[length];
- Array.Copy(arr, offset, result, 0, length);
- return result;
- }
- public void Dispose()
- {
- Encryptor.Dispose();
- Decryptor.Dispose();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment