2024. 6. 14. 06:47ใDevelopment๐ฉ๐ปโ๐ฆณ/C#
[์์ 3] 2์ฐจ์ ๋ฐฐ์ด์ ์ด์ฉํ ๋คํ์ ํ์ ์ํธ ๊ตฌํ.zip
๊ตฌํํ Vigenere ์ํธํ ํ๋ก๊ทธ๋จ์ ๋ํ ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ฐ ์ฃผ์ ๋ถ๋ถ์ ์ฝ๋ ๋ฉ์ปค๋์ฆ๊ณผ ์ฃผ์ ๊ตฌํ ๋ผ์ธ, ์ฐ์ ์ฐ์ฐ์, ํจ์๋ค์ ํ๋ฆ์ ์์ธํ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
์ ์ฒด ์ฝ๋ ๊ตฌ์กฐ
Vigenere ์ํธํ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉ์๋ก๋ถํฐ ํ๋ฌธ๊ณผ ํค์๋๋ฅผ ์ ๋ ฅ๋ฐ์ Vigenere ํ๋ฅผ ์ด์ฉํด ์ํธํ๋ ๋ฌธ์๋ฅผ ์์ฑํฉ๋๋ค. ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ Windows Forms๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑ๋์์ผ๋ฉฐ, ์ฃผ์ ๋ก์ง์ Form1 ํด๋์ค์ ์ด๋ฒคํธ ํธ๋ค๋ฌ์์ ์ฒ๋ฆฌ๋ฉ๋๋ค.
์ฃผ์ ์ฝ๋ ๋ฆฌ๋ทฐ
Vigenere ํ ์ด๋ธ
csharp์ฝ๋ ๋ณต์ฌ
// Vigenere ํ
์ด๋ธ ์์ฑ
String[,] Vigenere_Table = new String[26, 26];
for (int i = 0; i < 26; i++)
{
for (int j = 0; j < 26; j++)
{
Vigenere_Table[i, j] = ((char)((i + j) % 26 + 65)).ToString();
}
}
- ๋ฉ์ปค๋์ฆ: Vigenere ํ ์ด๋ธ์ ์์ฑํ๋ 2์ฐจ์ ๋ฐฐ์ด. ๊ฐ ์ ์ ๋ฌธ์ 'A'๋ถํฐ 'Z'๊น์ง ์ํํ๋ ๊ฐ์ผ๋ก ์ฑ์์ง.
- ์ฐ์ ์ฐ์ฐ์: (i + j) % 26๋ ํ๊ณผ ์ด์ ํฉ์ 26์ผ๋ก ๋๋ ๋๋จธ์ง๋ฅผ ๊ตฌํด ์ํ๋ฒณ ์ธ๋ฑ์ค๋ฅผ ๊ฒฐ์ .
ํผ ์ด๊ธฐํ
csharp์ฝ๋ ๋ณต์ฌ
private void InitializeComponent()
{
this.textBox1 = new TextBox();
this.textBox2 = new TextBox();
this.textBox4 = new TextBox();
this.textBox5 = new TextBox();
this.button1 = new Button();
this.label1 = new Label();
this.label2 = new Label();
this.label3 = new Label();
this.label4 = new Label();
this.label5 = new Label();
this.SuspendLayout();
// textBox1 ์ค์
this.textBox1.BackColor = Color.FromArgb(26, 26, 26);
this.textBox1.ForeColor = Color.White;
this.textBox1.BorderStyle = BorderStyle.None;
this.textBox1.Location = new Point(12, 70);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new Size(776, 20);
this.textBox1.TabIndex = 0;
// ๋๋จธ์ง UI ์ปดํฌ๋ํธ ์ค์ ์๋ต...
// button1 ์ค์
this.button1.BackColor = Color.FromArgb(0, 122, 204);
this.button1.FlatAppearance.BorderSize = 0;
this.button1.FlatStyle = FlatStyle.Flat;
this.button1.ForeColor = Color.White;
this.button1.Location = new Point(380, 30);
this.button1.Name = "button1";
this.button1.Size = new Size(75, 23);
this.button1.TabIndex = 4;
this.button1.Text = "์ํธํ";
this.button1.UseVisualStyleBackColor = false;
this.button1.Click += new EventHandler(this.button1_Click);
// ํผ ์ค์ ์๋ต...
this.ResumeLayout(false);
this.PerformLayout();
}
- ๋ฉ์ปค๋์ฆ: ํผ ์ด๊ธฐํ ๋ฐ UI ๊ตฌ์ฑ ์์ ์ค์ .
- UI ์ปดํฌ๋ํธ: TextBox, Button, Label ๋ฑ์ ์์ฑ์ ์ค์ ํ์ฌ ์ฌ์ฉ์ ์ธํฐํ์ด์ค ๊ตฌ์ฑ.
๋ฒํผ ํด๋ฆญ ์ด๋ฒคํธ ํธ๋ค๋ฌ
csharp์ฝ๋ ๋ณต์ฌ
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text == "")
{
MessageBox.Show("ํ๋ฌธ์ ์
๋ ฅํ๊ณ ๋ฒํผ์ ๋๋ฅด์ธ์.", "[ ๊ฒฝ๊ณ 1 ]");
textBox1.Focus();
return;
}
if (textBox4.Text == "")
{
MessageBox.Show("ํค์๋๋ฅผ ์
๋ ฅํ์ธ์.", "[ ๊ฒฝ๊ณ 3 ]");
textBox4.Focus();
return;
}
int iMunjang_Giri = textBox1.TextLength; // TextLength : ํ
์คํธ ๊ธธ์ด
int isKeyword_Giri = textBox4.TextLength;
string[] sMunjang = new string[iMunjang_Giri];
string[] sKeyword_Munjang = new string[isKeyword_Giri];
for (int iCount = 0; iCount < iMunjang_Giri; iCount++)
{
sMunjang[iCount] = textBox1.Text.Substring(iCount, 1);
// Sub string : ํ์ ๋ฌธ์์ด
}
for (int iCount = 0; iCount < isKeyword_Giri; iCount++)
{
sKeyword_Munjang[iCount] = textBox4.Text.Substring(iCount, 1);
}
if (iMunjang_Giri > isKeyword_Giri)
{
for (int iCount = 1; iCount <= iMunjang_Giri - isKeyword_Giri; iCount++)
textBox4.Text = textBox4.Text + textBox4.Text.Substring(iCount - 1, 1);
}
else if (iMunjang_Giri < isKeyword_Giri)
{
textBox4.Text = textBox4.Text.Substring(0, iMunjang_Giri);
}
isKeyword_Giri = textBox4.TextLength;
sKeyword_Munjang = new string[isKeyword_Giri];
for (int iCount = 0; iCount < isKeyword_Giri; iCount++)
{
sKeyword_Munjang[iCount] = textBox4.Text.Substring(iCount, 1);
}
textBox2.Text = "";
for (int iCount = 0; iCount < iMunjang_Giri; iCount++)
{
char cTemp = Convert.ToChar(sMunjang[iCount]);
char ccTemp = Convert.ToChar(sKeyword_Munjang[iCount]);
int iTemp = Convert.ToInt32(cTemp);
int iiTemp = Convert.ToInt32(ccTemp);
sMunjang[iCount] = Vigenere_Table[iTemp - 97, iiTemp - 97];
textBox2.Text = textBox2.Text + sMunjang[iCount];
}
}
- ๋ฉ์ปค๋์ฆ: ์ฌ์ฉ์ ์ ๋ ฅ์ ๊ฒ์ฆํ๊ณ , ์ ๋ ฅ๋ ํ๋ฌธ๊ณผ ํค์๋ ๊ธธ์ด๋ฅผ ๋ง์ถ๊ณ , Vigenere ์ํธํ ํ ์ด๋ธ์ ์ด์ฉํด ์ํธํ๋ ๋ฌธ์์ด์ ์์ฑ.
- ์ฐ์ ์ฐ์ฐ์: iTemp - 97, iiTemp - 97๋ ASCII ๊ฐ์ ์ธ๋ฑ์ค๋ก ๋ณํ.
- ํจ์์ ํ๋ฆ:
- ์ ๋ ฅ ๊ฒ์ฆ: ํ๋ฌธ๊ณผ ํค์๋๊ฐ ์ ๋ ฅ๋์๋์ง ํ์ธ.
- ํ๋ฌธ๊ณผ ํค์๋ ๊ธธ์ด ์กฐ์ : ํ๋ฌธ๊ณผ ํค์๋ ๊ธธ์ด๋ฅผ ๋ง์ถค.
- ์ํธํ ์ํ: ๊ฐ ๋ฌธ์๋ฅผ Vigenere ํ ์ด๋ธ์ ํตํด ์ํธํ.
๊ฒฐ๋ก
- ์ฅ์ : ์ฝ๋๊ฐ ๋ช ํํ๋ฉฐ, Vigenere ์ํธํ์ ๊ธฐ๋ณธ ์๋ฆฌ๋ฅผ ์ ๊ตฌํ. UI ๊ตฌ์ฑ๋ ๊ฐ๋จํ๊ณ ์ฌ์ฉํ๊ธฐ ์ฌ์.
- ๋จ์ : ํค์๋ ๊ธธ์ด๋ฅผ ํ๋ฌธ ๊ธธ์ด์ ๋ง์ถ๋ ๊ณผ์ ์ด ๋นํจ์จ์ . ๋ ํฐ ์ ๋ ฅ์ ๋ํด ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ์์ ์ ์์.
- ๊ฐ์ ์ : ํค์๋ ๊ธธ์ด ์กฐ์ ๋ก์ง์ ๊ฐ์ ํ๊ณ , ๋ ํฐ ์ ๋ ฅ์ ๋ํ ์ฑ๋ฅ ์ต์ ํ ํ์.
์ด ์์ ๋ฅผ ํตํด Vigenere ์ํธํ์ ๊ธฐ๋ณธ ์๋ฆฌ๋ฅผ ์ดํดํ ์ ์์ผ๋ฉฐ, ์ค์ ์ฐ์ ํ๊ฒฝ์์ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ถ๊ฐ์ ์ธ ์ต์ ํ์ ๋ณด์ ๊ฒํ ๊ฐ ํ์ํฉ๋๋ค.
using System;
using System.Drawing;
using System.Windows.Forms;
namespace WinFormsApp1
{
public partial class Form1 : Form
{
// Vigenere ์ํธํ ํ
์ด๋ธ์ ์์ฑํ๋ 2์ฐจ์ ๋ฐฐ์ด
String[,] Vigenere_Table = new String[26, 26];
public Form1()
{
InitializeComponent();
// Vigenere ํ
์ด๋ธ์ ์ด๊ธฐํ
for (int i = 0; i < 26; i++)
{
for (int j = 0; j < 26; j++)
{
Vigenere_Table[i, j] = ((char)((i + j) % 26 + 65)).ToString();
}
}
}
private void button1_Click(object sender, EventArgs e)
{
// ํ๋ฌธ์ด ์
๋ ฅ๋์ง ์์ ๊ฒฝ์ฐ ๊ฒฝ๊ณ ๋ฉ์์ง ํ์
if (textBox1.Text == "")
{
MessageBox.Show("ํ๋ฌธ์ ์
๋ ฅํ๊ณ ๋ฒํผ์ ๋๋ฅด์ธ์.", "[ ๊ฒฝ๊ณ 1 ]");
textBox1.Focus();
return;
}
// ํค์๋๊ฐ ์
๋ ฅ๋์ง ์์ ๊ฒฝ์ฐ ๊ฒฝ๊ณ ๋ฉ์์ง ํ์
if (textBox4.Text == "")
{
MessageBox.Show("ํค์๋๋ฅผ ์
๋ ฅํ์ธ์.", "[ ๊ฒฝ๊ณ 3 ]");
textBox4.Focus();
return;
}
// ํ๋ฌธ๊ณผ ํค์๋์ ๊ธธ์ด๋ฅผ ๊ฐ์ ธ์ด
int iMunjang_Giri = textBox1.TextLength;
int isKeyword_Giri = textBox4.TextLength;
string[] sMunjang = new string[iMunjang_Giri];
string[] sKeyword_Munjang = new string[isKeyword_Giri];
// ํ๋ฌธ์ ๊ฐ ๋ฌธ์๋ฅผ ๋ฐฐ์ด์ ์ ์ฅ
for (int iCount = 0; iCount < iMunjang_Giri; iCount++)
{
sMunjang[iCount] = textBox1.Text.Substring(iCount, 1);
}
// ํค์๋์ ๊ฐ ๋ฌธ์๋ฅผ ๋ฐฐ์ด์ ์ ์ฅ
for (int iCount = 0; iCount < isKeyword_Giri; iCount++)
{
sKeyword_Munjang[iCount] = textBox4.Text.Substring(iCount, 1);
}
// ํ๋ฌธ ๊ธธ์ด๊ฐ ํค์๋ ๊ธธ์ด๋ณด๋ค ๊ธด ๊ฒฝ์ฐ, ํค์๋๋ฅผ ๋ฐ๋ณตํ์ฌ ๊ธธ์ด๋ฅผ ๋ง์ถค
if (iMunjang_Giri > isKeyword_Giri)
{
for (int iCount = 1; iCount <= iMunjang_Giri - isKeyword_Giri; iCount++)
textBox4.Text = textBox4.Text + textBox4.Text.Substring(iCount - 1, 1);
}
// ํค์๋ ๊ธธ์ด๊ฐ ํ๋ฌธ ๊ธธ์ด๋ณด๋ค ๊ธด ๊ฒฝ์ฐ, ํค์๋์ ๊ธธ์ด๋ฅผ ํ๋ฌธ ๊ธธ์ด์ ๋ง์ถค
else if (iMunjang_Giri < isKeyword_Giri)
{
textBox4.Text = textBox4.Text.Substring(0, iMunjang_Giri);
}
// ์กฐ์ ๋ ํค์๋ ๊ธธ์ด๋ฅผ ๋ค์ ๊ฐ์ ธ์ด
isKeyword_Giri = textBox4.TextLength;
sKeyword_Munjang = new string[isKeyword_Giri];
// ์กฐ์ ๋ ํค์๋์ ๊ฐ ๋ฌธ์๋ฅผ ๋ฐฐ์ด์ ์ ์ฅ
for (int iCount = 0; iCount < isKeyword_Giri; iCount++)
{
sKeyword_Munjang[iCount] = textBox4.Text.Substring(iCount, 1);
}
// ์ํธ๋ฌธ์ ์ด๊ธฐํ
textBox2.Text = "";
// ํ๋ฌธ๊ณผ ํค์๋๋ฅผ Vigenere ํ
์ด๋ธ์ ํตํด ์ํธํ
for (int iCount = 0; iCount < iMunjang_Giri; iCount++)
{
char cTemp = Convert.ToChar(sMunjang[iCount]);
char ccTemp = Convert.ToChar(sKeyword_Munjang[iCount]);
int iTemp = Convert.ToInt32(cTemp);
int iiTemp = Convert.ToInt32(ccTemp);
sMunjang[iCount] = Vigenere_Table[iTemp - 97, iiTemp - 97];
textBox2.Text = textBox2.Text + sMunjang[iCount];
}
}
}
}
- Vigenere์ด๋ฆ์์ ์ ๋ํ ๋จ์ด์
๋๋ค. Vigenere ์ํธ (๋น์ ๋ค์ด๋ ์ด) ๋ ๊ทธ๊ฐ ๊ณ ์ํ ๋ค์ค ์ํ๋ฒณ ์นํ ์ํธ ๊ธฐ๋ฒ์ ์๋ฏธํฉ๋๋ค.
- ๋ช ์นญ ์ ๋: Blase de Vigenรจre (๋ธ๋ ์ด์ฆ ๋ ๋น๊ฑด ๋ ์ด)
- ์ค๋ช : ๋ค์ค ์ํ๋ฒณ ์นํ ์ํธ์ ํ ํํ๋ก, ์ํธํํ ๋ ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ฌธ์ ์ฌ๋ฌ ์ํ๋ฒณ์ผ๋ก ์นํํฉ๋๋ค.
- ํ๋ฌธ: HELLO
- ํค์๋: KEY
- ์ํธํ๋ ํ ์คํธ: RIJVS (ํค์๋๋ฅผ ๋ฐ๋ณต ์ ์ฉํ์ฌ ๊ฐ ๋ฌธ์๋ง๋ค ๋ค๋ฅธ ์นํ์ ์ ์ฉ)
- Vigenere ์ํธ
- Vigenere๋ ์ฝ์๊ฐ ์๋๋ผ, 16์ธ๊ธฐ ํ๋์ค์ ์ํธํ์ Blase de Vigenรจre์
- ์ฌ์ฉ๋ ํจ์์ ๋ณ์๋ค์ ์ญํ
- Form1()
- ์ญํ : ํด๋์ค ์์ฑ์. ํผ์ ์ด๊ธฐํํ๊ณ Vigenere ํ ์ด๋ธ์ ์์ฑํฉ๋๋ค.
- ๊ตฌํ: InitializeComponent()๋ฅผ ํธ์ถํ์ฌ ํผ์ ๊ตฌ์ฑ ์์๋ฅผ ์ด๊ธฐํํ๊ณ , Vigenere ํ ์ด๋ธ์ ์ค์ ํฉ๋๋ค.
- button1_Click(object sender, EventArgs e)
- ์ญํ : "์ํธํ" ๋ฒํผ ํด๋ฆญ ์ ํธ์ถ๋๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ. ํ๋ฌธ๊ณผ ํค์๋๋ฅผ ์ด์ฉํด Vigenere ์ํธํ๋ฅผ ์ํํฉ๋๋ค.
- ๊ตฌํ: ํ๋ฌธ๊ณผ ํค์๋๋ฅผ ๊ฒ์ฆํ๊ณ , ๊ธธ์ด๋ฅผ ๋ง์ถ๊ณ , Vigenere ํ ์ด๋ธ์ ํตํด ์ํธํํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
- String[,] Vigenere_Table
- ์ญํ : Vigenere ์ํธํ ํ ์ด๋ธ์ ์ ์ฅํ๋ 2์ฐจ์ ๋ฐฐ์ด.
- ๊ตฌํ: 26x26 ํฌ๊ธฐ์ ํ ์ด๋ธ๋ก, ์ํ๋ฒณ ๋ฌธ์๋ฅผ ์ด์ฉํด ์ด๊ธฐํ๋ฉ๋๋ค.
- int iMunjang_Giri
- ์ญํ : ํ๋ฌธ์ ๊ธธ์ด๋ฅผ ์ ์ฅ.
- ๊ตฌํ: textBox1.TextLength๋ฅผ ํตํด ํ๋ฌธ์ ๊ธธ์ด๋ฅผ ๊ฐ์ ธ์ด.
- int isKeyword_Giri
- ์ญํ : ํค์๋์ ๊ธธ์ด๋ฅผ ์ ์ฅ.
- ๊ตฌํ: textBox4.TextLength๋ฅผ ํตํด ํค์๋์ ๊ธธ์ด๋ฅผ ๊ฐ์ ธ์ด.
- string[] sMunjang
- ์ญํ : ํ๋ฌธ์ ๊ฐ ๋ฌธ์๋ฅผ ์ ์ฅํ๋ ๋ฐฐ์ด.
- ๊ตฌํ: ํ๋ฌธ์ ๊ธธ์ด๋งํผ ์ด๊ธฐํ๋๊ณ , ํ๋ฌธ์ ๊ฐ ๋ฌธ์๊ฐ ์ ์ฅ๋จ.
- string[] sKeyword_Munjang
- ์ญํ : ํค์๋์ ๊ฐ ๋ฌธ์๋ฅผ ์ ์ฅํ๋ ๋ฐฐ์ด.
- ๊ตฌํ: ํค์๋์ ๊ธธ์ด๋งํผ ์ด๊ธฐํ๋๊ณ , ํค์๋์ ๊ฐ ๋ฌธ์๊ฐ ์ ์ฅ๋จ.
- char cTemp
- ์ญํ : ํ์ฌ ์ฒ๋ฆฌ ์ค์ธ ํ๋ฌธ์ ๋ฌธ์๋ฅผ ์ ์ฅํ๋ ๋ณ์.
- ๊ตฌํ: Convert.ToChar(sMunjang[iCount])๋ฅผ ํตํด ํ๋ฌธ์ ๋ฌธ์๋ฅผ ๊ฐ์ ธ์ด.
- char ccTemp
- ์ญํ : ํ์ฌ ์ฒ๋ฆฌ ์ค์ธ ํค์๋์ ๋ฌธ์๋ฅผ ์ ์ฅํ๋ ๋ณ์.
- ๊ตฌํ: Convert.ToChar(sKeyword_Munjang[iCount])๋ฅผ ํตํด ํค์๋์ ๋ฌธ์๋ฅผ ๊ฐ์ ธ์ด.
- int iTemp
- ์ญํ : ํ์ฌ ์ฒ๋ฆฌ ์ค์ธ ํ๋ฌธ์ ๋ฌธ์์ ASCII ๊ฐ์ ์ ์ฅํ๋ ๋ณ์.
- ๊ตฌํ: Convert.ToInt32(cTemp)๋ฅผ ํตํด ํ๋ฌธ์ ๋ฌธ์์ ASCII ๊ฐ์ ๊ฐ์ ธ์ด.
- int iiTemp
- ์ญํ : ํ์ฌ ์ฒ๋ฆฌ ์ค์ธ ํค์๋์ ๋ฌธ์์ ASCII ๊ฐ์ ์ ์ฅํ๋ ๋ณ์.
- ๊ตฌํ: Convert.ToInt32(ccTemp)๋ฅผ ํตํด ํค์๋์ ๋ฌธ์์ ASCII ๊ฐ์ ๊ฐ์ ธ์ด.
- ํผ ์ด๊ธฐํ ๋ฐ Vigenere ํ
์ด๋ธ ์์ฑ (Form1)
- InitializeComponent()๋ฅผ ํตํด ํผ์ ๊ธฐ๋ณธ ๊ตฌ์ฑ์ ์ค์ ํฉ๋๋ค.
- Vigenere ํ ์ด๋ธ์ 26x26 ํฌ๊ธฐ๋ก ์ด๊ธฐํํ๊ณ , ๊ฐ ์์น์ ํด๋นํ๋ ์ํ๋ฒณ ๋ฌธ์๋ฅผ ์ ์ฅํฉ๋๋ค.
- ๋ฒํผ ํด๋ฆญ ์ด๋ฒคํธ ํธ๋ค๋ฌ (button1_Click)
- ํ๋ฌธ๊ณผ ํค์๋๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ ๋ ฅ๋์๋์ง ํ์ธํฉ๋๋ค.
- ํ๋ฌธ๊ณผ ํค์๋์ ๊ธธ์ด๋ฅผ ๋น๊ตํ์ฌ, ํ๋ฌธ์ด ๋ ๊ธธ๋ฉด ํค์๋๋ฅผ ๋ฐ๋ณตํ์ฌ ๊ธธ์ด๋ฅผ ๋ง์ถ๊ณ , ํค์๋๊ฐ ๋ ๊ธธ๋ฉด ํค์๋๋ฅผ ์๋ผ์ ๊ธธ์ด๋ฅผ ๋ง์ถฅ๋๋ค.
- ํ๋ฌธ๊ณผ ํค์๋์ ๊ฐ ๋ฌธ์๋ฅผ Vigenere ํ ์ด๋ธ์ ์ด์ฉํด ์ํธํํฉ๋๋ค.
- ์ํธํ๋ ๊ฒฐ๊ณผ๋ฅผ textBox2์ ์ถ๋ ฅํฉ๋๋ค.
- Form1()
[์์ 2] 2์ฐจ์ ๋ฐฐ์ด์ ์ด์ฉํ ๋์์ด์์ด ์ํธ ๊ตฌํ.zip
- [์์ 2] 2์ฐจ์ ๋ฐฐ์ด์ ์ด์ฉํ ๋์์ด์์ด ์ํธ ๊ตฌํ
- Vigenere์ด๋ฆ์์ ์ ๋ํ ๋จ์ด์
๋๋ค. Vigenere ์ํธ (๋น์ ๋ค์ด๋ ์ด) ๋ ๊ทธ๊ฐ ๊ณ ์ํ ๋ค์ค ์ํ๋ฒณ ์นํ ์ํธ ๊ธฐ๋ฒ์ ์๋ฏธํฉ๋๋ค.
- ๋ช ์นญ ์ ๋: Blase de Vigenรจre (๋ธ๋ ์ด์ฆ ๋ ๋น๊ฑด ๋ ์ด)
- ์ค๋ช : ๋ค์ค ์ํ๋ฒณ ์นํ ์ํธ์ ํ ํํ๋ก, ์ํธํํ ๋ ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ฌธ์ ์ฌ๋ฌ ์ํ๋ฒณ์ผ๋ก ์นํํฉ๋๋ค.
- ํ๋ฌธ: HELLO
- ํค์๋: KEY
- ์ํธํ๋ ํ ์คํธ: RIJVS (ํค์๋๋ฅผ ๋ฐ๋ณต ์ ์ฉํ์ฌ ๊ฐ ๋ฌธ์๋ง๋ค ๋ค๋ฅธ ์นํ์ ์ ์ฉ)
- Vigenere ์ํธ
- Vigenere๋ ์ฝ์๊ฐ ์๋๋ผ, 16์ธ๊ธฐ ํ๋์ค์ ์ํธํ์ Blase de Vigenรจre์
- ์ฌ์ฉ๋ ํจ์์ ๋ณ์๋ค์ ์ญํ
- Form1()
- ์ญํ : ํด๋์ค ์์ฑ์. ํผ์ ์ด๊ธฐํํ๊ณ Vigenere ํ ์ด๋ธ์ ์์ฑํฉ๋๋ค.
- ๊ตฌํ: InitializeComponent()๋ฅผ ํธ์ถํ์ฌ ํผ์ ๊ตฌ์ฑ ์์๋ฅผ ์ด๊ธฐํํ๊ณ , Vigenere ํ ์ด๋ธ์ ์ค์ ํฉ๋๋ค.
- button1_Click(object sender, EventArgs e)
- ์ญํ : "์ํธํ" ๋ฒํผ ํด๋ฆญ ์ ํธ์ถ๋๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ. ํ๋ฌธ๊ณผ ํค์๋๋ฅผ ์ด์ฉํด Vigenere ์ํธํ๋ฅผ ์ํํฉ๋๋ค.
- ๊ตฌํ: ํ๋ฌธ๊ณผ ํค์๋๋ฅผ ๊ฒ์ฆํ๊ณ , ๊ธธ์ด๋ฅผ ๋ง์ถ๊ณ , Vigenere ํ ์ด๋ธ์ ํตํด ์ํธํํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
- String[,] Vigenere_Table
- ์ญํ : Vigenere ์ํธํ ํ ์ด๋ธ์ ์ ์ฅํ๋ 2์ฐจ์ ๋ฐฐ์ด.
- ๊ตฌํ: 26x26 ํฌ๊ธฐ์ ํ ์ด๋ธ๋ก, ์ํ๋ฒณ ๋ฌธ์๋ฅผ ์ด์ฉํด ์ด๊ธฐํ๋ฉ๋๋ค.
- int iMunjang_Giri
- ์ญํ : ํ๋ฌธ์ ๊ธธ์ด๋ฅผ ์ ์ฅ.
- ๊ตฌํ: textBox1.TextLength๋ฅผ ํตํด ํ๋ฌธ์ ๊ธธ์ด๋ฅผ ๊ฐ์ ธ์ด.
- int isKeyword_Giri
- ์ญํ : ํค์๋์ ๊ธธ์ด๋ฅผ ์ ์ฅ.
- ๊ตฌํ: textBox4.TextLength๋ฅผ ํตํด ํค์๋์ ๊ธธ์ด๋ฅผ ๊ฐ์ ธ์ด.
- string[] sMunjang
- ์ญํ : ํ๋ฌธ์ ๊ฐ ๋ฌธ์๋ฅผ ์ ์ฅํ๋ ๋ฐฐ์ด.
- ๊ตฌํ: ํ๋ฌธ์ ๊ธธ์ด๋งํผ ์ด๊ธฐํ๋๊ณ , ํ๋ฌธ์ ๊ฐ ๋ฌธ์๊ฐ ์ ์ฅ๋จ.
- string[] sKeyword_Munjang
- ์ญํ : ํค์๋์ ๊ฐ ๋ฌธ์๋ฅผ ์ ์ฅํ๋ ๋ฐฐ์ด.
- ๊ตฌํ: ํค์๋์ ๊ธธ์ด๋งํผ ์ด๊ธฐํ๋๊ณ , ํค์๋์ ๊ฐ ๋ฌธ์๊ฐ ์ ์ฅ๋จ.
- char cTemp
- ์ญํ : ํ์ฌ ์ฒ๋ฆฌ ์ค์ธ ํ๋ฌธ์ ๋ฌธ์๋ฅผ ์ ์ฅํ๋ ๋ณ์.
- ๊ตฌํ: Convert.ToChar(sMunjang[iCount])๋ฅผ ํตํด ํ๋ฌธ์ ๋ฌธ์๋ฅผ ๊ฐ์ ธ์ด.
- char ccTemp
- ์ญํ : ํ์ฌ ์ฒ๋ฆฌ ์ค์ธ ํค์๋์ ๋ฌธ์๋ฅผ ์ ์ฅํ๋ ๋ณ์.
- ๊ตฌํ: Convert.ToChar(sKeyword_Munjang[iCount])๋ฅผ ํตํด ํค์๋์ ๋ฌธ์๋ฅผ ๊ฐ์ ธ์ด.
- int iTemp
- ์ญํ : ํ์ฌ ์ฒ๋ฆฌ ์ค์ธ ํ๋ฌธ์ ๋ฌธ์์ ASCII ๊ฐ์ ์ ์ฅํ๋ ๋ณ์.
- ๊ตฌํ: Convert.ToInt32(cTemp)๋ฅผ ํตํด ํ๋ฌธ์ ๋ฌธ์์ ASCII ๊ฐ์ ๊ฐ์ ธ์ด.
- int iiTemp
- ์ญํ : ํ์ฌ ์ฒ๋ฆฌ ์ค์ธ ํค์๋์ ๋ฌธ์์ ASCII ๊ฐ์ ์ ์ฅํ๋ ๋ณ์.
- ๊ตฌํ: Convert.ToInt32(ccTemp)๋ฅผ ํตํด ํค์๋์ ๋ฌธ์์ ASCII ๊ฐ์ ๊ฐ์ ธ์ด.
- ํผ ์ด๊ธฐํ ๋ฐ Vigenere ํ
์ด๋ธ ์์ฑ (Form1)
- InitializeComponent()๋ฅผ ํตํด ํผ์ ๊ธฐ๋ณธ ๊ตฌ์ฑ์ ์ค์ ํฉ๋๋ค.
- Vigenere ํ ์ด๋ธ์ 26x26 ํฌ๊ธฐ๋ก ์ด๊ธฐํํ๊ณ , ๊ฐ ์์น์ ํด๋นํ๋ ์ํ๋ฒณ ๋ฌธ์๋ฅผ ์ ์ฅํฉ๋๋ค.
- ๋ฒํผ ํด๋ฆญ ์ด๋ฒคํธ ํธ๋ค๋ฌ (button1_Click)
- ํ๋ฌธ๊ณผ ํค์๋๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ ๋ ฅ๋์๋์ง ํ์ธํฉ๋๋ค.
- ํ๋ฌธ๊ณผ ํค์๋์ ๊ธธ์ด๋ฅผ ๋น๊ตํ์ฌ, ํ๋ฌธ์ด ๋ ๊ธธ๋ฉด ํค์๋๋ฅผ ๋ฐ๋ณตํ์ฌ ๊ธธ์ด๋ฅผ ๋ง์ถ๊ณ , ํค์๋๊ฐ ๋ ๊ธธ๋ฉด ํค์๋๋ฅผ ์๋ผ์ ๊ธธ์ด๋ฅผ ๋ง์ถฅ๋๋ค.
- ํ๋ฌธ๊ณผ ํค์๋์ ๊ฐ ๋ฌธ์๋ฅผ Vigenere ํ ์ด๋ธ์ ์ด์ฉํด ์ํธํํฉ๋๋ค.
- ์ํธํ๋ ๊ฒฐ๊ณผ๋ฅผ textBox2์ ์ถ๋ ฅํฉ๋๋ค.
- Form1()
- ํจ์๋ค