2014년 11월 6일 목요일

C# 윈도우 폼(Windows Form)에서 App.Config 파일의 연결문자열 암호화 하기

C# 윈도우 폼(Windows Form)에서 App.Config 파일의 연결문자열 암호화 하기
 조회 : 393
나의 폴더 > C# | 2013-09-04 (Wed) 08:58http://blog.dreamwiz.com/papasmf1/13988558
C# 윈도우 폼(Windows Form)에서 App.Config 파일의 연결문자열 암호화 하는 방법입니다.
웹에서는 주로 web.config파일을 암호화 하기 위해 aspnet_regiis를 사용해서 특정 섹션을 암호화 할 수 있습니다.

윈도우 폼이라면 아래와 같이 할 수 있습니다. MSDN에 있는 코드 입니다.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Configuration;
using System.Net.Configuration;
using System.Diagnostics;
using System.Data.SqlClient;

namespace DemoCrypto
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

            GetConnectionStrings();
        }

        void GetConnectionStrings()
        {
            string strConn =
                ConfigurationManager.ConnectionStrings["strConn"].ToString();
            SqlConnection conn = new SqlConnection(strConn);
            SqlDataAdapter daProd = new SqlDataAdapter("Select * From Products", conn);
            DataSet ds = new DataSet();
            daProd.Fill(ds);
            dataGridView1.DataSource = ds.Tables[0];

        }
        private void button2_Click(object sender, EventArgs e)
        {
            Configuration config =
                ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            ConfigurationSection section = config.AppSettings;

            if (section != null)
            {
                if (!section.SectionInformation.IsProtected && !section.ElementInformation.IsLocked)
                {
                    section.SectionInformation.ProtectSection("RsaProtectedConfigurationProvider");
                    section.SectionInformation.ForceSave = true;
                    config.Save(ConfigurationSaveMode.Full);
                }
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            ToggleConfigEncryption("DemoCrypto.exe");
        }

        static void ToggleConfigEncryption(string exeConfigName)
        {
            // Takes the executable file name without the
            // .config extension.
            try
            {
                // Open the configuration file and retrieve
                // the connectionStrings section.
                Configuration config = ConfigurationManager.
                    OpenExeConfiguration(exeConfigName);

                ConnectionStringsSection section =
                    config.GetSection("connectionStrings")
                    as ConnectionStringsSection;

                if (section.SectionInformation.IsProtected)
                {
                    // Remove encryption.
                    section.SectionInformation.UnprotectSection();
                }
                else
                {
                    // Encrypt the section.
                    section.SectionInformation.ProtectSection(
                        "DataProtectionConfigurationProvider");
                }
                // Save the current configuration.
                config.Save();

                Console.WriteLine("Protected={0}",
                    section.SectionInformation.IsProtected);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

    }
}

첫번째 버튼의 코드는 App.config에 있는 연결 문자열을 읽는 코드 입니다.
두번째 버튼의 코드는 App.config에 있는 연결 문자열을 암호화 해 주는 코드입니다.
아래와 같이 원본이 암호화 됩니다.

(원본 App.config파일 입니다.)
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
  </configSections>
  <connectionStrings>
    <add name="strConn" connectionString="server=.\sqlExpress;database=Northwind;uid=sa;pwd=1234" />
    <add name="DemoCrypto.Properties.Settings.Setting" connectionString="server=.\sqlExpress;database=Northwind;uid=sa;pwd=1234" />
  </connectionStrings>
</configuration>

(암호화된 파일입니다.)
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
  </configSections>
  <connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">
    <EncryptedData>
      <CipherData>
        <CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAA4bLd+S2nTUG6hGXm2YdmwAQAAAACAAAAAAAQZgAAAAEAACAAAAD1hizSUiN5cGv6uv1zLt+kBPt6Hs4uQQ/WPCbDzCLocwAAAAAOgAAAAAIAACAAAABJPMfnABloDsSCyjj1gOM68TyxNt9oo328KVLVNC850zACAAD2hro/CyBq6dGBEe68UeGqvtNAOlhNuDGPh18nfm1voxX/rsKfL6wKOGWta0osmFF+jrP8vhi5KxuccCXLeqINu/3WBE1eK2qFMuFDOeHqIfJ8+VSkRxa6fTrFNMq/OAASQtVexNRuDOOGIzBhsAw3kJ1TdD3pooO26ecqbhjaz9TJDumnWSVNvuM1/pXNqjihz4UtZOfkbGo8cgk8Xe4PS5SuXKv/fNG0vCNrkIIyrrGeAvaiDlUFoQWkXEIQcMGPx99S8/D54WaqtvXhvyDyQbLbZgkbK1Xvnhv6wfS3V8YlnNysNnOnTDq7s5X5A/obmwqBFbQ6hUlRjwXJE3yNeZGUSDrtSAAxrFOsWcSLlchy1SGHN5hTkcM1vbOC6h/ZWOhwojCGLwI/R5yuZP3uaKcOVqHyykfhDe9bf4xZmwHM+W9xkqXmJ+LXngwvZ0W1J1sdq2nGyWEEzMKsZT5zwDF+QayGp9eRr71U0OGW5M0Wzq5ZBjSt+wZIzSnByxQYtMRZ/h5XHfK5BFXSWQOh+sbYruym/1QlvwNo2SLGbopm4REsH7YEfZElxEfe8M0gqrCueJm2lI5+z2C7Hc3oJBgopQeTq4H/BWuxTIrIZDrvDdDydsgjUuR/vNMsJM0t8h8nJw4nYPtCSC/H06uL+WDyIAP27uQda1z5HsTitsyEHfWCXZ7MZ6E08yn8lGOfi+5BEfofB/n/9rK01Lejii3ZobmMKvRMuyp8na5PD0AAAAA+XtqtvecGDYTAvZNj3I8Hs9+CTJ6TzJ78F/DNBJDvoO8C0WYfct0d7m13X5Cry4F8nrAWlWd4RQ7Z9Ja96z+I</CipherValue>
      </CipherData>
    </EncryptedData>
  </connectionStrings>

</configuration>

댓글 없음:

댓글 쓰기

참고: 블로그의 회원만 댓글을 작성할 수 있습니다.

'일론 머스크' '젠슨 황' AI 리더들, 그들의 성공 비결은 바로 이것 - 누가 부자가 되는가 영상입니다. ㅎㅎ

  책을 통해서만 접했던 내용들을 영상으로 보니 더 실감이 납니다. KBS에서 방송된 내용인데 주말에 보시면 좋은 영상입니다. 엔비디아의 주가가 이해가 됩니다. ㅋㅋ 생각보다 미국시장이 강한 것이 AI는 거의 미국과 중국이 주도하는 시장이 되고 있습...