White Whale Studio

[C# & MDB - 3] 파일 암/복호화 본문

IT Engineering/C#.net

[C# & MDB - 3] 파일 암/복호화

glorymind 2023. 2. 13. 15:43
반응형

이번 포스팅은 약간 보너스 느낌의 포스팅입니다.

굳이 MDB파일이 아니라 다른 파일도 사용가능합니다.

다만 MDB파일의 경우 날것그대로 정보가 너무 쉽게 노출이 되다보니 파일의 암호화하여 쉽게 노출되지 않도록 하기 위한 방법입니다.

자체적으로 MDB에 비밀번호를 거는 방법도 있는 것으로 알고 있는데 인터넷에 버젓이 이 비밀번호를 파훼하는 방법이 있더라구요.

그래서 다르게 찾은 이 방법은  CryptoStream을 활용하여 암호화하는 방식이라 비밀번호 파훼법은 의미가 없을듯합니다.

Encrypt 소스는 다음과 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using System.Security;
using System.Security.Cryptography;
 
private string sKey = "Lock_PASSWORD";
 
public void EncryptFile(string sInputFilename, string sOutputFilename)
        {
            try
            {
                UnicodeEncoding UE = new UnicodeEncoding();
                byte[] key = UE.GetBytes(sKey);
 
                string cryptFile = sOutputFilename;
                FileStream fsCrypt = new FileStream(cryptFile, FileMode.Create);
 
                RijndaelManaged RMCrypto = new RijndaelManaged();
 
                CryptoStream cs = new CryptoStream(fsCrypt,
                RMCrypto.CreateEncryptor(key, key),
                CryptoStreamMode.Write);
 
                FileStream fsIn = new FileStream(sInputFilename, FileMode.Open);
 
                int data;
                while ((data = fsIn.ReadByte()) != -1)
                    cs.WriteByte((byte)data);
 
 
                fsIn.Close();
                cs.Close();
                fsCrypt.Close();
 
                System.IO.File.Delete(sInputFilename);
            }
            catch (Exception ex)
            {
                
            }
        }
cs

소스는 그대로 가져다 쓰셔도 되는데 프로세스는 보시는 것이 좋습니다.

sKey는 파일을 암/복호화할 때 사용할 비밀키값이고 위 프로세스 상에서는

파일을 암호화한뒤 기존의 비암호화 파일을 삭제처리합니다.

 

Decrypt소스는 다음과 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
using System.Security;
using System.Security.Cryptography;
 
private string sKey = "Lock_PASSWORD";
 
public void DecryptFile(string sInputFilename, string sOutputFilename)
        {
            try
            {
                UnicodeEncoding UE = new UnicodeEncoding();
                byte[] key = UE.GetBytes(sKey);
 
                FileStream fsCrypt = new FileStream(sInputFilename, FileMode.Open);
 
                RijndaelManaged RMCrypto = new RijndaelManaged();
 
                CryptoStream cs = new CryptoStream(fsCrypt,
                RMCrypto.CreateDecryptor(key, key),
                CryptoStreamMode.Read);
 
                FileStream fsOut = new FileStream(sOutputFilename, FileMode.Create);
 
                int data;
                while ((data = cs.ReadByte()) != -1)
                    fsOut.WriteByte((byte)data);
 
                fsOut.Close();
                cs.Close();
                fsCrypt.Close();
 
                System.IO.File.Delete(sInputFilename);
            }
            catch (Exception ex)
            {
 
            }
        }
cs

순서로보면 Encrypt의 역순입니다.

프로세스를 보면 암호화 함수와 같이 기존의 암호화된 파일을 삭제합니다.

 

위의 코드를 사용하여 MDB데이터에 대한 작업을 할때는 복호화를 통해 풀어서 작업하고 끝나는 즉시

다시 암호화하여 보관하도록 하면 될듯합니다.

반응형
Comments