public static class FileEncryptor
{
private const int AesKeySize = 256;
private const int AesBlockSize = 128;
public const int KeySizeInBytes = AesKeySize / 8;
/// <summary>
/// Encrypts a file using a 32 character key.
/// </summary>
public static Task EncryptAsync(string inputFilePath, string outputFilePath, string key, CancellationToken token = default)
{
if (string.IsNullOrWhiteSpace(key))
{
//if key is empty do jack
}
byte[] keyBytes = Encoding.UTF8.GetBytes(key);
return EncryptAsync(inputFilePath, outputFilePath, keyBytes, token);
}
public static async Task EncryptAsync(string inputFilePath, string outputFilePath, byte[] keyBytes, CancellationToken token = default)
{
if (!File.Exists(inputFilePath))
{
}
if (keyBytes.Length != KeySizeInBytes)
{
}
using var aes = Aes.Create();
aes.BlockSize = AesBlockSize;
aes.KeySize = AesKeySize;
aes.Key = keyBytes;
await using FileStream outFileStream = new(outputFilePath, FileMode.Create);
// Write initialization vector to beginning of file
await outFileStream.WriteAsync(aes.IV.AsMemory(0, aes.IV.Length), token);
ICryptoTransform encryptor = aes.CreateEncryptor();
await using CryptoStream cryptoStream = new(
outFileStream,
encryptor,
CryptoStreamMode.Write);
await using var inputFileStream = new FileStream(inputFilePath, FileMode.Open);
await inputFileStream.CopyToAsync(cryptoStream, token);
}
}
public static class FileEncryptor
{
private const int AesKeySize = 256;
private const int AesBlockSize = 128;
public const int KeySizeInBytes = AesKeySize / 8;
/// <summary>
/// Encrypts a file using a 32 character key.
/// </summary>
public static Task EncryptAsync(string inputFilePath, string outputFilePath, string key, CancellationToken token = default)
{
if (string.IsNullOrWhiteSpace(key))
{
//if key is empty do jack
}
byte[] keyBytes = Encoding.UTF8.GetBytes(key);
return EncryptAsync(inputFilePath, outputFilePath, keyBytes, token);
}
public static async Task EncryptAsync(string inputFilePath, string outputFilePath, byte[] keyBytes, CancellationToken token = default)
{
if (!File.Exists(inputFilePath))
{
}
if (keyBytes.Length != KeySizeInBytes)
{
}
using var aes = Aes.Create();
aes.BlockSize = AesBlockSize;
aes.KeySize = AesKeySize;
aes.Key = keyBytes;
await using FileStream outFileStream = new(outputFilePath, FileMode.Create);
// Write initialization vector to beginning of file
await outFileStream.WriteAsync(aes.IV.AsMemory(0, aes.IV.Length), token);
ICryptoTransform encryptor = aes.CreateEncryptor();
await using CryptoStream cryptoStream = new(
outFileStream,
encryptor,
CryptoStreamMode.Write);
await using var inputFileStream = new FileStream(inputFilePath, FileMode.Open);
await inputFileStream.CopyToAsync(cryptoStream, token);
}
}