25.07.2013 Views

Ödev 4 - Üç Şifreleyici - Çözücü

Ödev 4 - Üç Şifreleyici - Çözücü

Ödev 4 - Üç Şifreleyici - Çözücü

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!