Arduino ile Kriptoloji Uygulamasi

Arduino temel olarak acik kaynakli bir gelistirme platformuna sahip cevresiyle etkilesimli calisabilen sistemler tasarlayabileceginiz bir fiziksel programlama platformudur. Kullanici tarafindan girilen metinlerin nukleotid bazlarina donusturulmesi ya da girilen nukleotid dizilimlerinin metine donusturulmesini saglayan ve arduino uzerinde calisan bir sifreleme programidir.
Arduino Nedir
Arduino temel olarak acik kaynakli bir gelistirme platformuna sahip cevresiyle etkilesimli calisabilen sistemler tasarlayabileceginiz bir fiziksel programlama platformudur.
Arduino kartlari uzerinde Atmega firmasina ait 8 ve 32 bitlik mikrodenetleyiciler bulunmakla birlikte analog ve digital girisleri sayesinde de analog ve digital datalarla da calisilabilir. Arduino IDE kod editoru ve derleyicisi sayesinde derlenen programi Arduino kartlarina yukleyebilirsiniz, her platformda calisabilecek Java programlama dilinde yazilmis bir uygulamadir.
Arduino IDE’ye, Library ve Example kodlara resmi sitesi arduino.cc ’den ulasabilirsiniz.
Genel anlamda Arduino’nun sahip oldugu ozellikler;
Atmega328 mikrodenetleyici
USB ve adaptor baglanti portlari
Güç regulatoru
3.3V veya 5V calisma gerilimi
14 dijital ve 6 analog giris/cikis
16kb Flash bellek
3.3V için 8Mhz ve 5V için 16Mhz calisma hizi
Kriptoloji Uygulamasi
Kullanici tarafindan girilen metinlerin nukleotid bazlarina donusturulmesi ya da girilen nukleotid dizilimlerinin metine donusturulmesini saglayan ve arduino uzerinde calisan bir sifreleme programidir.
Ornek verilecek olursa;
Nukleotid Dizilimi Metin Karsiligi
AAGTATAGTGCATTATTGACCGAGGACGCTAACTGGTCAT DENEYLER
AGCTGAGGCACAATCGATTTACCGTTATTAAGCGGATATT KLONLAMA
Kurallar : Alfabedeki her bir buyuk harfin 5 bit'lik kodlamasi gerceklestirilir.
00000 A 0 00110 F 6 01100 J 12 10010 Ö 18 11000 U 24
00001 B 1 00111 G 7 01101 K 13 10011 O 19 11001 Ü 25
00010 C 2 01000 G 8 01110 L 14 10100 R 20 11010 V 26
00011 Ç 3 01001 H 9 01111 M 15 10101 S 21 11011 Y 27
00100 D 4 01010 I 10 10000 N 16 10110 S 22 11100 Z 28
00101 E 5 01011 I 11 10001 O 17 10111 T 23
Ardindan, 0 bit'in esitligi "A" veya "T" nukleotid bazlarindan rastgele, 1 bit'in esitligi "G" veya "C" nukleotid bazlarindan rastgele secim yapilmis olacak.
Ornegin; AGCTGAGGCACAATCGATTTACCGTTATTAAGCGGATATT dizisi 5'er gruplara ayrilip bit'e donusturuldugunde, ondalik degerleri ile birlikte harf degerleride cozumlenmis olacak.
AGCTG: bit degeri: 01101, ondalik degeri: 13, harf: K
AGGCA: bit degeri: 01110, ondalik degeri: 14, harf: L
CAATC: bit degeri: 10001, ondalik degeri: 17, harf: O
GATTT: bit degeri: 10000, ondalik degeri: 16, harf: N
ACCGT: bit degeri: 01110, ondalik degeri: 14, harf: L
TATTA: bit degeri: 00000, ondalik degeri: 0, harf: A
AGCGG: bit degeri: 01111, ondalik degeri: 15, harf: M
ATATT: bit degeri: 00000, ondalik degeri: 0, harf: A
Proteus Tasarimi
Devices : Arduino Uno R3, LM018L - LCD display, Virtual Terminal, Ground
LCD RS pin'i Arduino digital pin 12'ye
LCD Enable pin'i Arduino digital pin 11'e
LCD D4 pin'i Arduino digital pin 5'e
LCD D5 pin'i Arduino digital pin 4'e
LCD D6 pin'i Arduino digital pin 3'e
LCD D7 pin'i Arduino digital pin 2'ye
Virtual Terminal RXD pin'i Arduino digital pin 1'e
Virtual Terminal TXD pin'i Arduino digital pin 0'a
LCD RW pin'i GND'ye baglariz.
Arduino Kod Tasarimi
#include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); String harf, yeniKelime, bitDonustur, harfDonustur, al, hecele; int temp,count = 0; char oku<100>
; void setup() { Serial.begin(9600); //DNA("AAGTATAGTGCATTATTGACCGAGGACGCTAACTGGTCAT"); //DNA("AGCTGAGGCACAATCGATTTACCGTTATTAAGCGGATATT"); Serial.println("Kriptoloji Yonteminiz..."); } void loop() { if (Serial.available() > 0) { oku
= (char)Serial.read(); if (oku
== '\r') { oku
= '\0';
//Serial.println("1 . Metin ---> DNA"); Serial.print(oku); lcd.clear(); MetintoDNA(oku);
Serial.println("2 . DNA ---> Metin"); Serial.print(oku); lcd.clear(); DNAtoMetin(oku);
count = 0;
}
}
}
void DNAtoMetin(String sequence)
{
for (int i=0; i<sequence.length(); i +=5)
{
bitDonustur = donustur(sequence.substring(i, i+5));
harfDonustur = cozumle(yeniKelime);
lcd.print(harfDonustur);
}
}
void MetintoDNA(String sequence)
{
for (int i=0; i<sequence.length(); i++)
{
harfDonustur = butunlestir(sequence.substring(i,i+1));
bitDonustur = olustur(harfDonustur);
lcd.print(bitDonustur);
}
}
String donustur(String kelime)
{
yeniKelime = "";
for (int i=0; i<kelime.length(); i++)
{
if (kelime.charAt(i) == 'A' || kelime.charAt(i) == 'T') temp=0;
if (kelime.charAt(i) == 'G' || kelime.charAt(i) == 'C') temp=1;
yeniKelime = yeniKelime + temp;
}
return yeniKelime;
}
String cozumle(String hecele)
{
if (hecele.equals("00000")) harf = "A"; //0
if (hecele.equals("00001")) harf = "B"; //1
if (hecele.equals("00010")) harf = "C"; //2
if (hecele.equals("00011")) harf = "Ç"; //3
if (hecele.equals("00100")) harf = "D"; //4
if (hecele.equals("00101")) harf = "E"; //5
if (hecele.equals("00110")) harf = "F"; //6
if (hecele.equals("00111")) harf = "G"; //7
if (hecele.equals("01000")) harf = "G"; //8
if (hecele.equals("01001")) harf = "H"; //9
if (hecele.equals("01010")) harf = "I"; //10
if (hecele.equals("01011")) harf = "I"; //11
if (hecele.equals("01100")) harf = "J"; //12
if (hecele.equals("01101")) harf = "K"; //13
if (hecele.equals("01110")) harf = "L"; //14
if (hecele.equals("01111")) harf = "M"; //15
if (hecele.equals("10000")) harf = "N"; //16
if (hecele.equals("10001")) harf = "O"; //17
if (hecele.equals("10010")) harf = "Ö"; //18
if (hecele.equals("10011")) harf = "P"; //19
if (hecele.equals("10100")) harf = "R"; //20
if (hecele.equals("10101")) harf = "S"; //21
if (hecele.equals("10110")) harf = "S"; //22
if (hecele.equals("10111")) harf = "T"; //23
if (hecele.equals("11000")) harf = "U"; //24
if (hecele.equals("11001")) harf = "Ü"; //25
if (hecele.equals("11010")) harf = "V"; //26
if (hecele.equals("11011")) harf = "Y"; //27
if (hecele.equals("11100")) harf = "Z"; //28
return harf;
}
String olustur(String kelime)
{
yeniKelime = "";
//Random rnd = new Random();
for (int i=0; i<kelime.length(); i++)
{
if (kelime.charAt(i) == '0'){
temp = random(2);
if (temp == 0) al = "A";
if (temp == 1) al = "T";
}
if (kelime.charAt(i) == '1'){
temp = random(2);
if (temp == 0) al = "G";
if (temp == 1) al = "C";
}
yeniKelime = yeniKelime + al;
}
return yeniKelime;
}
String butunlestir(String harf)
{
if (harf.equals("A")) hecele = "00000"; //0
if (harf.equals("B")) hecele = "00001"; //1
if (harf.equals("C")) hecele = "00010"; //2
if (harf.equals("Ç")) hecele = "00011"; //3
if (harf.equals("D")) hecele = "00100"; //4
if (harf.equals("E")) hecele = "00101"; //5
if (harf.equals("F")) hecele = "00110"; //6
if (harf.equals("G")) hecele = "00111"; //7
if (harf.equals("G")) hecele = "01000"; //8
if (harf.equals("H")) hecele = "01001"; //9
if (harf.equals("I")) hecele = "01010"; //10
if (harf.equals("I")) hecele = "01011"; //11
if (harf.equals("J")) hecele = "01100"; //12
if (harf.equals("K")) hecele = "01101"; //13
if (harf.equals("L")) hecele = "01110"; //14
if (harf.equals("M")) hecele = "01111"; //15
if (harf.equals("N")) hecele = "10000"; //16
if (harf.equals("O")) hecele = "10001"; //17
if (harf.equals("Ö")) hecele = "10010"; //18
if (harf.equals("P")) hecele = "10011"; //19
if (harf.equals("R")) hecele = "10100"; //20
if (harf.equals("S")) hecele = "10101"; //21
if (harf.equals("S")) hecele = "10110"; //22
if (harf.equals("T")) hecele = "10111"; //23
if (harf.equals("U")) hecele = "11000"; //24
if (harf.equals("Ü")) hecele = "11001"; //25
if (harf.equals("V")) hecele = "11010"; //26
if (harf.equals("Y")) hecele = "11011"; //27
if (harf.equals("Z")) hecele = "11100"; //28
return hecele;
}
Kodlama yapildiktan sonra proteus uzerinde hangi arduino kullaniliyorsa ayni sekilde kodu derleme yaparken tool menusunden board'ini da benzer secmeliyiz. Proteus tasariminda Arduino Uno R3 kullandigim icin kodumu compile ederken Board'u Arduino Uno'yu seciyorum.
Compile edilen koda ait hex dosyasini proteus'ta ki arduino'ya gomdukten sonra asagidaki ekran goruntulerine ait sonuclari elde etmis oluyorum.
Uygulamanin Ekran Goruntuleri
Keyifli Calismalar Dilerim.










Comments