요즘들어 보안에 대한 프로그래밍을 많이 하게 된다.
하래서 한다만 과연 무엇을 위한 보안인지는 모르겠다. 그냥 하는거다.
DB연결자를 구성할때 최소한 서버IP, 사용자정보, 사용자 비밀번호 를 요구한다.
나같은 경우 보통 ini 파일안에 그 정보를 담아두곤 하는데 이 부분에 사용자 비밀번호가 노출돼 보안에 지적될 소지가 있어 암호화 처리하여 ini에 구성한 뒤 복호화 하여 DB Connection을 맺게 구성을 해야 할 것 같다.
그래서 준비해 보았다.

다음과 같은 화면으로 구성해 보았다.
언젠가 쓸 날이 있을거라 본다.
# frmMain.cs
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;
namespace _CS__Generator_Password
{
public partial class frmMain : Form
{
//암호화 복호화 키 8글자 (필히 8자리여야 함)
WATCrypt m_crypt;
public frmMain()
{
InitializeComponent();
}
private void frmMain_Load(object sender, EventArgs e)
{
}
private void btnApply_Click(object sender, EventArgs e)
{
if (txtKeyCode.Text.Length != 8)
{
MessageBox.Show("Only allows 8-digit");
return;
}
//암호화 복호화 키 8글자 (필히 8자리여야 함)
m_crypt = new WATCrypt(txtKeyCode.Text);
txtKeyCode.ReadOnly = true;
}
private void btnEncryption_Click(object sender, EventArgs e)
{
if (txtKeyCode.ReadOnly == false)
{
txtKeyCode.Focus();
return;
}
if (txtEncryption.Text == "")
{
txtEncryption.Focus();
return;
}
// 암호화
txtEncryption_Gene.Text = m_crypt.Encrypt(txtEncryption.Text);
}
private void btnDecryption_Click(object sender, EventArgs e)
{
if (txtKeyCode.ReadOnly == false)
{
return;
}
if (txtDecryption.Text == "")
{
txtDecryption.Focus();
return;
}
// 복호화
txtDecryption_Gene.Text = m_crypt.Decrypt(txtDecryption.Text);
}
}
}
# WATCrypt.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.IO;
namespace _CS__Generator_Password
{
class WATCrypt
{
byte[] Skey = new byte[8];
public WATCrypt(string strKey)
{
Skey = ASCIIEncoding.ASCII.GetBytes(strKey);
}
public string Encrypt(string p_data)
{
if (Skey.Length != 8)
{
throw (new Exception("Invalid key. Key length must be 8 byte."));
}
DESCryptoServiceProvider rc2 = new DESCryptoServiceProvider();
rc2.Key = Skey;
rc2.IV = Skey;
MemoryStream ms = new MemoryStream();
CryptoStream cryStream = new CryptoStream(ms, rc2.CreateEncryptor(), CryptoStreamMode.Write);
byte[] data = Encoding.UTF8.GetBytes(p_data.ToCharArray());
cryStream.Write(data, 0, data.Length);
cryStream.FlushFinalBlock();
return Convert.ToBase64String(ms.ToArray());
}
public string Decrypt(string p_data)
{
DESCryptoServiceProvider rc2 = new DESCryptoServiceProvider();
rc2.Key = Skey;
rc2.IV = Skey;
MemoryStream ms = new MemoryStream();
CryptoStream cryStream = new CryptoStream(ms, rc2.CreateDecryptor(), CryptoStreamMode.Write);
byte[] data = Convert.FromBase64String(p_data);
cryStream.Write(data, 0, data.Length);
cryStream.FlushFinalBlock();
return Encoding.UTF8.GetString(ms.GetBuffer());
}
}
}