KRİPTOANALİZ DERSİ FİNAL ÖDEVİ. PSO ile TRANSPOSITION CIPHER ÇÖZÜMÜ

Benzer belgeler
Karabük Üniversitesi, Mühendislik Fakültesi... WEB TEKNOLOJİLERİ

GENETİK ALGORİTMA GEZGİN SATICI ÖDEVİ

MEKANİZMA TEKNİĞİ (7. Hafta)

C#.Net & Linq (Language Integrated Query)

İNTERNET TABANLI PROGRAMLAMA

İNTERNET TABANLI PROGRAMLAMA- 3.ders

Bilgisayar Programcılığı. Görsel Programlama-I. Öğr. Gör. Cansu AYVAZ GÜVEN

ÖDEVLERİ SİSTEME YÜKLEME USULLERİ

SINIF İÇİ UYGULAMA KODLARI

ÖDEVLERİ SİSTEME YÜKLEME USULLERİ

Yeni bir proje açarken File New - Web Site diyoruz. Gelen ekranda Visual Basic veya C# seçilebilir. Biz ders kapsamında C# programlama dilini seçtik.

yeni_uye_kayit.ascx UserControl sayfamızda, kaydedilmek istenen üye eğer daha önce veritabanımızda kayıtlı ise bunu buldurup kullanıcıyı uyaralım;

İNTERNET TABANLI PROGRAMLAMA

Görsel Programlama (Visual Programming) 2.Hafta

C# Console Uygulamaları ifelse Yapıları 2

İNTERNET TABANLI PROGRAMLAMA

Görsel Programlama 1

PDF. C# Console Örnekleri.

C# Yazım Kuralları ERCİYES. Ü. BİLGİSAYAR M. COMPUTER PROGRAMMING II 1 FEHİM KÖYLÜ

C# ÖRNEKLERİ.

Visual Studio 2010 veya 2013, Sharp Develop 3.2 programlarını kurabilirsiniz.

İl İlçe uygulaması. : Seçilen ile ait ilçeleri listeleyen program. //İl değişkeni için kodu aşağıdaki sayfadan kopyalayınız.

Görsel Programlama (Visual Programming) 2.Hafta

Oyuncu Sınıfı. /// <summary> /// Oyuncumuzun elindeki kart /// </summary> private ArrayList kart = new ArrayList(6);

VISUAL C#.NET. CONSOLE EKRANINA YAZI YAZDIRILMASI (using System Kullanılarak Yapılan Uygulama) CONSOLE DERLENMESİ= Debug / Start Without Debugging

PROSEDÜRLER ve FO F NKS K İY İ O Y NLA L R A

DÖNGÜLER (LOOPS) while(), do-while(), for(), foreach()

//word document object Document document = null; public Form1() { InitializeComponent(); }

11- FONKSİYONLAR (FUNCTIONS)

Resimlerin üstüne yazı yazacağız. resimyukle.aspx sayfası oluşturuyoruz.

ASP.NET CLASS KULLANARAK VERİTABANI İŞLEMLERİ

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

Nesne Tabanlı Programlama-1

İNTERNET TABANLI PROGRAMLAMA- 3.ders

Ders 4: Diziler (Arrays( Arrays) barisgokce.com

Aynı tipten çok sayıda değişken topluluğudur. X Y Score1 Score2 (0) (1) (2)...

MySqlConnection connection; MySqlCommand command; MySqlDataReader reader; MySqlDataAdapter adapter; DataTable table;

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

Görsel Programlama (Visual Programming)

A- VERİTABANI BAĞLANTISINI HAZIR NESNE KULLANARAK YAPMA

YMT219 VERİ YAPILARI ÖDEV-1

Bölüm 8. Ayrık Küme. Olcay Taner Yıldız. O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, / 16

İNTERNET TABANLI PROGRAMLAMA- 9.ders BİLGİLERİN GRIDVIEW İÇERİSİNDE EKLENMESİ, DÜZENLENMESİ VE SİLİNMESİ

Visual C# - Görsel Programlama II Örnek Sorular ve Cevaplar

Diziler İndisli Değişkenler

string yenisaatdeger; string yenidakikadeger; string yenisaniyedeger;

// seçilen dosya ile programımız arasına bir boru hattı açıyoruz StreamReader sr = new StreamReader(dosya_adi, Encoding.GetEncoding(1254));

using System; using System.Diagnostics; using System.Drawing; using System.Windows.Forms; using System.Runtime.InteropServices;

C++ Dersi: Nesne Tabanlı Programlama

D İ Z İ L E R A R R A Y S

Bölüm 6. Karma. Olcay Taner Yıldız. O. T. Yıldız, C && Java ile Veri Yapılarına Giriş, Boğaziçi Üniversitesi Yayınevi, / 31

İNTERNET TABANLI PROGRAMLAMA- 10.ders GRIDVIEW İÇERİSİNDE YENİ KAYIT EKLEME, FOTOGRAF LİSTELEME, SIRALAMA YAPMA VE DROPDOWN EKLEME

VERİ TABANI İŞLEMLERİ (NESNE TABANLI PROGRAMLAMA TEKNİĞİ İLE)

Lambda İfadeleri (Lambda Expressions)

C# da basit console uygulamaları. C# da basit console uygulamaları

Durum Yönetimi. Olan sayfalar ekleyelim. BasitSayac.aspx

Diziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU

BİLGİLERİ GÖRÜNTÜLEME, KAYDETME, GÜNCELLEME VE SİLME İŞLEMLERİNİN BİRLİKTE ANLATIMI

İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 1 DERSİ LAB. ÖDEVİ

BİL1001 Bilgisayar Bilimlerine Giriş 1

Length: metin uzunluğunu yada diğer bir deyişle dizi elaman sayısını döndürür.

C# Console Uygulamaları Switch Case Yapıları ve For Döngüsü

MASTER PAGE SAYFASI KULLANIMI

İNTERNET TABANLI PROGRAMLAMA- 11.ders FORM UYGULAMASI (DROPDOWN BİLGİ YÜKLEME, VALIDATION KONTROLLERI, PAREMETRELİ KAYIT YAPMA)

2 ALGORİTMA VE AKIŞ DİYAGRAMLARI

NESNEYE YÖNELİK PROGRAMLAMA

C# ÖRNEK UYGULAMALAR

Ders 8: Metotlar. barisgokce.com

8- PROGRAM YAPISAL KOMUTLARI ve. M.ilkucar MAKU MYO 1

Programlama Dilleri 3

Sınav Dağılım & IMKB Endeks

BAĞLANTILI SĐSTEMLER ĐLE MODEL BĐR YERLEŞKE A MODEL CAMPUS WITH CONNECTED SYSTEMS

NESNEYE YÖNELİK PROGRAMLAMA

Masa üstünde vt34.mdb dosyası var, onu projemize eklemek için, App_Data ya sağ tıkla Add Existing Item vt34.mdb adlı dosyayı seç Add

Polialfabetik Şifreleme (Vigenere)

ALGORTMA ve PROGRAMLAMA - II (C# Sürümü) DERS NOTLARI

İNTERNET TABANLI PROGRAMLAMA- 4.ders

Kitap Ekle linki tıklandığında, admin.aspx sayfamızın görüntüsü aşağıdaki şekilde olacaktır.

WiFly GSX Modülü ile Devrelerinizi Kablosuz Ağlara Bağlayın

İNTERNET TABANLI PROGRAMLAMA- 8.ders VERİTABANI İLE İLGİLİ BİLGİLERİ GÖRÜNTÜLEME, KAYDETME, GÜNCELLEME VE SİLME

C# Çalışma Örnekleri

C# EĞİTİM ÇALIŞMASI. Gülhan AYDOĞAN AKKAŞ : Bilişim Teknolojileri Öğretmeni. 1.ToolBox : Properties Solution Explorer...

İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 1 DERSİ LAB. ÖDEVİ

Aritmetik Operatörler, Math Sınıfı ve Program Akış Komutları

C# ve SQL Server ile Resim Yükleme ve Login İşlemi

DÖNGÜLER BMÜ-111 ALGORİTMA VE PROGRAMLAMA-I YRD. DOÇ. DR. İLHAN AYDIN

1 Aralık 2011 / Perşembe

DATA STRUCTURES. Part I C# Programlama Dili Temelleri

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2

BMÜ-101 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ LABORATUARI

DİZİLER-KATARLAR ALGORİTMA VE PROGRAMLAMA II

Sağ Tıkla. 5 Ocak 2012 / Perşembe. Yeni bir site açıyoruz. File New Web Site Browse yeni klasör ocak5persembe OK

ALGORİTMA VE PROGRAMLAMA I DERS NOTU#8

Dizi ( Array ) ve Dizgi ( String )

BPR152-Algoritma ve Programlama II Uygulama -13

Karabük Üniversitesi, Mühendislik Fakültesi...

Yeni site açıp, masa üstündeki vt.mdb dosyasını sitemize ekliyoruz ve a bağlanıp 1 Mart tarihli sayfayı açıyoruz

NESNEYE DAYALI PROGRAMLAMA 11. HAFTA UYGULAMA DERSİ

Response : Sunucunun istemciye veri yollamasını

Transkript:

KRİPTOANALİZ DERSİ FİNAL ÖDEVİ PSO ile TRANSPOSITION CIPHER ÇÖZÜMÜ 1

Uygulama Hakkında PSO kullanılarak şifreli metnin çözümü gerçekleştirilmiştir. Metin dosyadan okunmuştur. Okunan metin rastgele üretilen parçacıklar ile çözümlenmiş ve bigram ve trigram frekans hesabı yapılmıştır. Uygunluk fonksiyonu olarak aşağıdaki fonksiyon kullanılmıştır. Burada ve sırasıyla bigram ve trigram frekanslarını ve ağırlıkları temsil etmektedir. Bigram ve trigramlara atanan ağırlıklar ve değerler aşağıdaki tabloda verilmiştir. ve değerleri sırasıyla 0.7 ve 0.3 olarak belirlenmiştir. Bigram Ağırlık TH 2 HE 1 IN 1 ER 1 AN 1 ED 1 Trigram Ağırlık THE 5 ING 5 AND 5 EEE 5 Algoritmanın işleyiş aşamaları aşağıda verilmiştir. Her bir parçacık için rastgele key değeri üret. Elde edilen değere göre her bir parçacık için metni çöz. Metin çözüldükten sonra her bir parçacık için bigram ve trigram frekans hesabı yap. Yapılan hesaptan elde edilen frekans ve ağırlıklara göre fitness değerini hesapla Elde edilen fitness değerine göre pbest ve gbest değerlerini bul. Hız ayarlaması yap ve parçacıkları hareket ettir. Hız ayarlama işlemi algoritmanın en önemli kısmıdır. Hız vektörleri ayarlanırken normal PSO da kullanılan hız vektörü değiştirilerek kullanılmıştır. Bunun sebebi elimizdeki problemin sürekli değil kesikli olmasıdır. Hız vektörü ayarlama işleminde öncelikle her bir değişken için yön tayini yapılmıştır. Bunun için standart PSO da olan hız formülü ikiye bölünmüştür. Pbest için =random*c1*(pbest_fitness-parçacık_fitness) Gbest için= random*c1*(gbest_fitness-parçacık_fitness) formülü kullanılmıştır. Bu değerlerden hangisinin büyük olduğuna bakılarak parçacığın o anki key değerinin gideceği yön belirlenmiştir. Daha sonra gideceği yönde +1 olarak arttırılarak, eğer azalıyorsa -1 olarak azaltılarak başka bir dizide kalıp şeklinde tutulmuştur. Bu kalıp hareket kalıbı olarak kullanılacaktır. Hareket kalıbı parçacıktaki her bir değişkenin nereye doğru gideceğini belirler. Kalıbın işleyişinde ilk önce değişkenin ilk elemanı ile kalıbın ilk elemanına bakılır. Kalıbın ilk elemanındaki değerin değişken dizisindeki yeri bulunur. Daha sonra 1. Eleman ile kalıba göre yeri bulunan eleman değiştirilir. Bu işlem kalıbın son elemanına gelene kadar uygulanır. Bütün yer değiştirme işlemleri parçacık üzerinde yapılır. Aşağıda kalıba göre hareket örneği verilmiştir. 2

Örnek Parçacık = [1,2,3,4,5] Örnek Gbest = [3,4,5,1,2] elde edilen Örnek Kalıp=[2,3,4,3,4] 1 den 3 e bir adım 2, 2 den 4 e bir adım 3, 3 den 5 e bir adım 4, 4 ten 1 e bir adım 3, 5 ten 2 ye bir adım 4 olarak hesaplanır ve kalıp [2,3,4,3,4] olmuş olur. Kalıptan hareket ise; 1.Aşama: Parçacığın ilk elemanı olan1 ile kalıbın ilk elemanı olan 2 yer değiştirilir [2,1,3,4,5] 2.Aşama: Yeni oluşan parçacıkta kalıba göre ikinci eleman olan 3 ile parçacığın ikinci elemanı olan 1 yer değiştirilir [2,3,1,4,5] 3.Aşama: Parçacıktaki 1 ile kalıba göre 4 değiştirilir [2,3,4,1,5] 4.Aşama: Parçacıktaki 1 ile kalıba göre 3 değiştirilir [2,1,4,3,5] 5.Aşama: Parçacıktaki 5 ile kalıba göre 4 değiştirilir [2,1,5,3,4] Şeklinde olur ve sonuç olarak oluşan parça 2,1,5,3,4 olur. Yeni parçacıkla tekrar metin çözülür ve hesaplamalar yapılır. Bu değerler kullanılarak elde edilen tam sonuç 100.6 olarak bulunmuştur ve elde edilen key aşağıdaki ekran çıktısında soldaki listbox a yazdırılmıştır. Textbox üzerinde yazan değer sadece kontrol amaçlıdır. 3

Ekran çıktılarında görüldüğü üzere PSO tam sonucu bulabilmiştir ve metni tamamen doğru bir şekilde çözebilmiştir. Bazı durumlarda ise sonuca çok yaklaşmıştır. Aşağıdaki ekran çıktılarında ise farklı ayarlarla elde edilen sonuçlara yer verilmiştir. Görüldüğü gibi sonuç key değeri çok az bir farkla yanlış hesaplanmıştır. 4

5

Sonucun ekrana yazdırılması için aşağıya bir richtextbox eklenmiştir ve sonuç yazdırılmış ilk resimde yaklaşık bulunan sonuca göre elde edilen sonuca göre metin ikinci resimde ise tam olarak bulunan sonuca göre elde edilen metin gözükmektedir. 6

KODLAR Bütün kodlar c# üzerinde yazılmıştır. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; namespace WindowsFormsApplication1 public partial class Form1 : Form degiskenler = new int[uzunluk]; flag = new bool[uzunluk]; pbest_degiskenler = new int[uzunluk]; public kus gbest; public void uygunluk(ref kus [] suru, int sat,int sut,char [,] şifreli_matris) //şifrenin çözümü işlemi for (int t = 0; t < suru.length; t++) int[] bi = new int[6]; //çözülen metne göre hesapların yapılması //bi gram frekansı for (int i = 0; i < çözüm_.length-1; i++) if ((çözüm_[i] == 'T') && (çözüm_[i + 1] == 'H')) bi[0]++; else if ((çözüm_[i] == 'H') && (çözüm_[i + 1] == 'E')) bi[1]++; (çözüm_[i+2] == 'G')) tri[1]++; else if ((çözüm_[i] == 'A') && (çözüm_[i+1] == 'N') && (çözüm_[i+2] == 'D')) tri[2]++; else if ((çözüm_[i] == 'E') && (çözüm_[i+1] == 'E') && (çözüm_[i+2] == 'E')) tri[3]++; suru[t].fitness = 0.7 * (bi[0] * 2 + bi[1] + bi[2] + bi[3] + bi[4] + bi[5]) + 0.3 * (tri[0] * 5 + tri[1] * 5 + tri[2] * 5 - tri[3] * 5); //gönderilen makaledeki fitness ve ağırlıklar alınmıştır. formül aynen uygulanmıştır. public void pbest_gbest(ref kus[] suru) for (int i = 0; i < suru.length; i++) 7

eleman 3 yer değişir //ikinci eleman daha önce neydi ve nereye gidiyordu ona bakılarak 2. eleman değiştirilir //yönler ve gidilecek birim daha önce sabit hesaplanır ve yer değişimi yapılır. int seed = (int)datetime.now.ticks;//random sayı prosedürleri for (int i = 0; i < suru.length; i++) int[] swap_değerleri = new int[suru[i].degiskenler.length]; //değişim kalıbını burada saklayacağız //yön ve swap değer hesabı int yön = -99; //yön bilgisi için kullanılacak değer for (int j = 0; j < swap_değerleri.length; j++) larak atanan parçacığın kendi sınırları dışında bir kalıp oluşturmaması için swap_değerleri[j] = 1;//gbest olarak atanan parçacığın kendi sınırları dışında bir kalıp oluşturmaması için if (swap_değerleri[j] > 5)//gbest olarak atanan parçacığın kendi sınırları dışında bir kalıp oluşturmaması için swap_değerleri[j] = 5;//gbest olarak atanan parçacığın kendi sınırları dışında bir kalıp oluşturmaması için else if (suru[i].degiskenler[j] > suru[i].pbest_degiskenler[j]) //gbest için yapılanın aynısının pbest için olanıdır yön = -1; else yön = 1; swap_değerleri[j] = suru[i].degiskenler[j] + yön; void flag_kontrol(ref kus birey) //eğer bir değişken 1,2,3,4,5 ten biri yok ise değer false olarak kalır //flag atama işlemi for(int i=0;i<birey.degiskenler.length;i++) if (birey.degiskenler[i] == 1) birey.flag[0] = true; else if (birey.degiskenler[i] == 2) birey.flag[1] = true; else if (birey.degiskenler[i] == 3) birey.flag[2] = true; else if (birey.degiskenler[i] == 4) birey.degiskenler[j] = 1; birey.flag[0] = true; else if (!birey.flag[1]) birey.degiskenler[j] = 2; birey.flag[1] = true; else if (!birey.flag[2]) birey.degiskenler[j] = 3; birey.flag[2] = true; else if (!birey.flag[3]) birey.degiskenler[j] = 4; birey.flag[3] = true; 8

else if (!birey.flag[4]) birey.degiskenler[j] = 5; birey.flag[4] = true; private void button2_click(object sender, EventArgs e) //şifreli metnin dosya üzerinden alınması işlemi string path; OpenFileDialog od = new OpenFileDialog(); od.showdialog(); path = od.filename; StreamReader rd = new StreamReader(path); şifreli = rd.readtoend(); int uzunluk = Convert.ToInt32(textBox1.Text); int sut = uzunluk; int sat = şifreli.length / uzunluk; char[,] şifreli_matris = new char[sut, sat]; int sayac = 0; for (int i = 0; i < sut; i++) for (int j = 0; j < sat; j++) şifreli_matris[i, j] = şifreli[sayac++]; int iterasyon = Convert.ToInt32(textBox6.Text); int par_sayı = Convert.ToInt32(textBox3.Text); double c1 = Convert.ToDouble(textBox4.Text); double c2 = Convert.ToDouble(textBox5.Text); kus[] suru = new kus[par_sayı]; gbest=new kus(uzunluk); int seed = (int)datetime.now.ticks; for (int i = 0; i < par_sayı; i++) suru[i] = new kus(uzunluk); //yeni sürü oluşumu ve rastgele veri ataması Random r = new Random(seed++);//random sayı prosedürleri for (int j = 0; j < uzunluk; j++) r = new Random(seed++); //random sayı prosedürleri suru[i].flag[j] = false; //aşağıda bahsedilen kontrol için suru[i].degiskenler[j] = r.next(1, 99)%5+1; //random aralığını sabit ama gelen değerleri daha geniş tutmak için yapıldı r = null; r = new Random(seed++); //random sayı prosedürleri r = null; r = new Random(seed++);//random sayı prosedürleri flag_kontrol(ref suru[i]); //bu başlangıçta aynı değeri atamaması için sınıf içinde yapılan olmayan değerin aynı olana atanması işlemi for (int i = 0; i < iterasyon; i++) uygunluk(ref suru, sat, sut, şifreli_matris); //fitness hesabı pbest_gbest(ref suru); //pbest ve gbest ataması hız(ref suru,c1,c2); //hız ayarlaması ve hareket 9