1
0
mirror of https://git.teknik.io/Teknikode/Teknik.git synced 2023-08-02 14:16:22 +02:00
Teknik/Utilities/Cryptography/AES.cs
2022-05-22 20:51:09 -07:00

71 lines
2.5 KiB
C#

using System.IO;
using System.Security.Cryptography;
using System.Text;
namespace Teknik.Utilities.Cryptography
{
public static class AES
{
public static byte[] Encrypt(byte[] value, byte[] key, byte[] iv, int keyLength, int blockLength, int feedbackSize, CipherMode mode, PaddingMode paddingMode)
{
using (var cipher = CreateCipher(key, iv, keyLength, blockLength, feedbackSize, mode, paddingMode))
{
return Encrypt(cipher, value);
}
}
public static byte[] Decrypt(byte[] value, byte[] key, byte[] iv, int keyLength, int blockLength, int feedbackSize, CipherMode mode, PaddingMode paddingMode)
{
using (var cipher = CreateCipher(key, iv, keyLength, blockLength, feedbackSize, mode, paddingMode))
{
return Decrypt(cipher, value);
}
}
public static byte[] Encrypt(Aes cipher, byte[] value)
{
byte[] encryptedBytes;
using (var encryptor = cipher.CreateEncryptor())
using (MemoryStream ms = new MemoryStream())
using (CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
using (var bw = new BinaryWriter(cs, Encoding.UTF8))
{
bw.Write(value);
bw.Close();
encryptedBytes = ms.ToArray();
}
return encryptedBytes;
}
public static byte[] Decrypt(Aes cipher, byte[] value)
{
byte[] decryptedBytes;
using (var decryptor = cipher.CreateDecryptor())
using (MemoryStream ms = new MemoryStream())
using (CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Write))
using (var bw = new BinaryWriter(cs, Encoding.UTF8))
{
bw.Write(value);
bw.Close();
decryptedBytes = ms.ToArray();
}
return decryptedBytes;
}
public static Aes CreateCipher(byte[] key, byte[] iv, int keyLength, int blockSize, int feedbackSize, CipherMode mode, PaddingMode paddingMode)
{
Aes cipher = Aes.Create();
cipher.Mode = mode;
cipher.Padding = paddingMode;
cipher.Key = key;
cipher.IV = iv;
cipher.KeySize = keyLength;
cipher.BlockSize = blockSize;
cipher.FeedbackSize = feedbackSize;
return cipher;
}
}
}