Ödev 4 - Üç Şifreleyici - Çözücü
Ödev 4 - Üç Şifreleyici - Çözücü
Ödev 4 - Üç Şifreleyici - Çözücü
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Bil413 - Kriptografi ve Güvenlik Dersi, 4. <strong>Ödev</strong><br />
<strong>Üç</strong> Basit <strong>Şifreleyici</strong>nin (ve Şifre <strong>Çözücü</strong>nün) Uygulanması<br />
Burak USGURLU<br />
20394676<br />
burak@gencnet.com<br />
5 Nisan 2007, Perşembe<br />
Derste görülen basit şifreleme (chiper) metotlarından üçü Microsoft Visual Studio 2005, C#<br />
ortamında uygulanmıştır. Bunlar Route Transposition, Route Variation ve Columnar Transposition.<br />
<strong>Üç</strong> metodun uygulanmasında kullanılan ortak yöntem;<br />
• Girdinin uzunluğuna göre eşit satır ve sütun sayısına sahip bir tablo yaratıldı.<br />
• Tablonun hücrelerine önce satır, daha sonra sütun olacak şekilde girdi karakterleri<br />
yerleştirilir.<br />
• Tabloda eğer boş yer kaldıysa rasgele karakterlerle doldurulur.<br />
• Daha sonra metoda özel şifreleme kullanılır.<br />
o Route Transposition: Tablonun sütunları yan yana getirilerek şifreli metin<br />
oluşturulur.<br />
o Route Variation: Tablo saat yönünde sarmal içe doğru çıktıya yazdırılarak şifreli<br />
metin oluşturulur.<br />
o Columnar Transposition: Tablonun sütunları tersten alınarak şifreli metin<br />
oluşturulur.<br />
Şifreli metin, kullanılan şifreleme metodunun tersi uygulanarak tabloya yazılır. Daha sonra ilk<br />
tabloya yerleştirildiği gibi tablodan okunarak düz metin elde edilir.<br />
Ekran Görüntüsü:<br />
Örnek çıktılar:<br />
Girdi: bu bir denemedir.<br />
Route Transposition: brersu m.n desfbedkqinixc<br />
Route Variation: brerybbntiinib u m.imdede<br />
Columnar Transposition: ib ubned ridemexpi.reebxf<br />
1
Programın Kaynak Kodu:<br />
Programın kaynak kodu uzun olduğu için bir kısmı verilmiştir. (Ana yordam ve Route<br />
Transposition metodu.) Tamamı 379 satır ve 6 sayfa olan kod istenildiği takdirde elektronik olarak<br />
verilebilir.<br />
private void button1_Click(object sender, EventArgs e)<br />
{<br />
//if empty give error and return<br />
if (this.textBoxInput.Text.Length == 0) {<br />
MessageBox.Show("Input Empty, please type something.", "Input<br />
Empty", MessageBoxButtons.OK, MessageBoxIcon.Error);<br />
return;<br />
}<br />
this.textBoxOutput.Clear();<br />
//change case to lower<br />
//acording to language<br />
if (this.comboBoxLang.SelectedItem.ToString().Equals("Turkish"))<br />
{<br />
this.textBoxInput.Text = this.textBoxInput.Text.ToLower(new<br />
CultureInfo("tr-TR", false));<br />
}<br />
else<br />
{<br />
this.textBoxInput.Text = this.textBoxInput.Text.ToLower(new<br />
CultureInfo("en-US", false));<br />
}<br />
if (radioRouteTransposition.Checked)<br />
{<br />
if (radioEncrypt.Checked) textBoxOutput.Text =<br />
routeTransposition(textBoxInput.Text);<br />
else textBoxOutput.Text =<br />
deRouteTransposition(textBoxInput.Text);<br />
}<br />
else if(radioRouteVariation.Checked)<br />
{<br />
if (radioEncrypt.Checked) textBoxOutput.Text =<br />
routeVariation(textBoxInput.Text);<br />
else textBoxOutput.Text = deRouteVariation(textBoxInput.Text);<br />
}<br />
else if(radioColumnarTransposition.Checked)<br />
{<br />
if (radioEncrypt.Checked) textBoxOutput.Text =<br />
columnarTransposition(textBoxInput.Text);<br />
else textBoxOutput.Text =<br />
deColumnarTransposition(textBoxInput.Text);<br />
}<br />
}<br />
public String routeTransposition(String input)<br />
{<br />
//initialize random<br />
Random rnd = new Random();<br />
//find chiper table size<br />
int size = 0;<br />
int power = 0;<br />
while (size < input.Length)<br />
{<br />
power++;<br />
size = (int)System.Math.Pow(power, 2);<br />
}<br />
2
}<br />
//create chipperArray<br />
char[,] chipperArray = new char[power, power];<br />
size = 0;<br />
//fill the chiper array<br />
for (int i = 0; i < chipperArray.GetLength(0); i++)<br />
{<br />
for (int j = 0; j < chipperArray.GetLength(1); j++)<br />
{<br />
//fill with random char if all the text is entered.<br />
if (size > input.Length - 1)<br />
{<br />
chipperArray[i, j] = charsLcase[rnd.Next(0, 21)];<br />
}<br />
else<br />
{<br />
chipperArray[i, j] = input[size];<br />
}<br />
size++;<br />
}<br />
}<br />
String output = "";<br />
for (int i = 0; i < chipperArray.GetLength(0); i++)<br />
{<br />
for (int j = 0; j < chipperArray.GetLength(1); j++)<br />
{<br />
output += chipperArray[j, i].ToString();<br />
}<br />
}<br />
return output;<br />
3