본문 바로가기

C#/.Net - Windows Form

01. Connection String 암호화 ( Encryption Decryption )

■ .Net 기반 프로그램 개발 시 접속정보를 App.config 파일에 저장한 경우 

 - App.config에 DB접속정보나 기타 정보를 저장하여 사용하는 경우 프로그램명.exe.config 파일에 접속정보가 

   저장되는데 메모패드로 열어보는 경우 간단히 확인되므로 보안상으로 취약하며 외부로 노출 될 수 있기때문에

   Conifg 파일을 암호하 하는 방법을 찾아보았습니다.

 

 1. Code Project에서 원본 코드를 다운로드하여 확인 할 수 있습니다. 

 2. 사용방법

   2-1 참조주소로 설정한 Code 프로젝트 사이트에 접속 후 로그인하여 소스 다운로드

   2-2 프로그램을 실행하면 아래와 같은 프로그램이 실행됨.

 

참조주소https://www.codeproject.com/Tips/598863/EncryptionplusDecryptionplusConnectionplusStringpl

    2-3 .. 버튼을 클릭하여 .Net Executables 파일을 열기

    2-4 Encrypt 버튼 클릭

 

 2. 소스코드 

- 지정된 경로의 파일을 열어서 암호화

public static void EncryptConnectionString(bool encrypt,string fileName)
{
    Configuration configuration = null;
    try
    {
        // Open the configuration file and retrieve the connectionStrings section.
        configuration = ConfigurationManager.OpenExeConfiguration(fileName);
        ConnectionStringsSection configSection = 
        configuration.GetSection("connectionStrings") as ConnectionStringsSection;
        if ((!(configSection.ElementInformation.IsLocked)) && 
        	(!(configSection.SectionInformation.IsLocked)))
        {
            if (encrypt && !configSection.SectionInformation.IsProtected)
            {
                //this line will encrypt the file
                configSection.SectionInformation.ProtectSection
                	("DataProtectionConfigurationProvider");
            }

            if (!encrypt && 
            configSection.SectionInformation.IsProtected)//encrypt is true so encrypt
            {
                //this line will decrypt the file. 
                configSection.SectionInformation.UnprotectSection();
            }
            //re-save the configuration file section
            configSection.SectionInformation.ForceSave = true;
            // Save the current configuration
          
            configuration.Save();
            Process.Start("notepad.exe", configuration.FilePath);
            //configFile.FilePath 
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }             
}

- 암호화 전 후 App.config 파일

-- 암호화 전 
<connectionStrings>
    <add name="SecurePassDataBase" connectionString="Data Source=D-6058;
    Initial Catalog=DEMO_Test;User ID=sysdba;Password=xxxxxx" />
</connectionStrings> 

-- 암호화 후 
<connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">
    <EncryptedData>
      <CipherData>
        <CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAATeylFe/
        xsUiVdcZvovEYDwQAAAACAAAAAAADZgAAwAAAABAAAABZsoaKP62hL85wpS+O3+
        znAAAAAASAAACgAAAAEAAAAHZ5NcKcDcWuEVDKyU4mz7J4AQAAAILD3fmIimyY2rkEkAdAtRn0dh9tI7+
        Y5+ILciikoSd/y2myUS88vJ59pIf82vOLk/0UwKL8TnHEaFTeX7SJ5par6pW7Pyhu4kKTEMyMUQsZX/
        h8RjNOnt+Q/kZIdqF2YWxFUP0RF3GWirvMNWS3do7IE0WaJ1W3wL+HhalglmKURWIGHsvJlybl+
        EGI8crPnli0W/yMN+fR0P/ndaTY87kR4+0gvKDWzZ/dMh8E7ZtodFzTQ4pjpl5YyRHH/
        Tc3oFUtimCnzXvCVT4ykK6NEQfPiPc5KJW6ajTEEGOrAXTnr9HF2wCRekE3WUVPYkeHRTjtuf
        2hUyvYx4eoGeOIAzFFXxY1GzZqhl8YaHlukZagiTVbfXA6Wh+K0dsAiOPz+wbCT92/
        blgsdkoKSMy8vRqFxAhX8HoW6KbJhsBPOvv36iBr1RecCpzUxWrVssS+wi/JclVfVs0nYb/
        pFidcJwhuwBsS6IzvV1tgrk8F9CUor+6DYHd/ABQAAABZjFi30hPRmKj+pvxFzjeNH+
        Dhhg==</CipherValue>
      </CipherData>
    </EncryptedData>
</connectionStrings>

- 암호화된 정보를 불러오는 코드 

string connectionString = ConfigurationManager.ConnectionStrings["SecurePassDataBase"].ToString();

- 참조주소

 

Encryption Decryption Connection String for the App.Config File

How to develop connection string encryption on the application config file.

www.codeproject.com