SEPTAGH
New member
Arkadaşlar bu akşam 2-3 konu daha okudum ve paylaşmak istiyorum.En kolay anlaşılır yöntemlerden birisi.Bulmaca hazırlamak gibi...
2. Playfair Şifreleme Yöntemi
2.1. Algoritma
Playfair Şifreleme Yöntemi 5x5 lik bir harf matrisind yapılan belirli satır ve sütun işlemlerine dayanan bir şifredir. Farkettiğiniz gibi 5x5 lik bir matrise 25 eleman olması durumu söz konusu. İngiliz alfabesinde düşünüyoruz ve J harfini hiçbir şekilde şifrelemiyoruz. Yani 26 harfli ingiliz alfabesindeki J harfi hariç tüm harfleri şifreliyoruz. Bu harf matrisinin aynısı deşifreleme yapacak kişide de bulunmalıdır. Farz edelim ki harf matrisimiz aşağıdaki gibi oluşmuş.
A Z K L O
W X N M B
C D F E G
S Y H I P
R T U Z V
Ve diyelim ki ANNE kelimesini şifrelicez. Playfair şifreleme algoritması harfleri çiftler halinde şifreleme esasına dayanır. Yani AN harf çifti alınır ve beraber şifrelenir. Matriste A ve N harfleri bulunur
A Z K L O
W X N M B
C D F E G
S Y H I P
R T U Z V
Daha sonra A nın satırındaki ve N nin sütünundaki harf alınır ve A nın yerine yazılır. N nin satırındaki ve A nın sütunundaki harf de alınıp N nin yerine yazılır. AN harf çifti KW ye dönüşmüş oldu. Eğer aynı matriste deşifreleme yaparsanız KW nin de AN ye dönüştüğünü görürsünüz. Şimdi bu algoritmada problem yaratabilecek bazı uç noktalarını inceleyelim.
2.2. Bazı Uç Noktaları Ve Çözüm Şekilleri
1-)Şifrelemede harfler çifter çifter alınıp indis numaralarına göre şifreleme yapılıyor.Ancak son harf tek başına değerlendirilecekse,yani bir harf kaldıysa o zaman o harfin şifrelenmiş şekli kendisinden bir sonraki sütunda bulunan harftir.
2-)SS örneğinde tabloda S’den bir sonraki sütunda bulunan harf S’lerin şifrelenmiş halleri olarak kabul edilir.
3-)Aynı satırda bulunan iki harf şifrelenecekse bu harflerin şifrelenmiş şekilleri aynı satırda olan ve kendilerinden bir sonraki sütunda bulunan harflerdir.
4-)Aynı sütunda bulunan iki harf şifrelenecekse bu harflerin şifrelenmiş şekilleri aynı sütunda olan ve kendilerinden bir sonraki satırda bulunan harflerdir.
5-)Eğer kelimenin içinde J harfi varsa aynen yazılır.
6-)TANJANT kelimesinde T,A şifrelendikten sonra N harfi alınır fakat ondan sonra J olduğu için J geçilir ve A harfi alınır.Yani şifreleme sırasında kullanılan harf çifti N ve A olarak kabul edilir.
7-)JAJ kelimesi yazılırsa A dan bir sonraki sütunda bulunan harf alınır J ler aynen yazılır.
Şifrelenecek harf tablonun son satırında bulunuyorsa,bulunduğu satırın ilk sütunundaki eleman o harfin şifrelenmiş şeklidir.
9-) Şifrelenecek harf tablonun son sütununda bulunuyorsa,bulunduğu sütunun ilk satırındaki eleman o harfin şifrelenmiş şeklidir.
10-)MATILDAJJJJ kelimesi şifrelenirken şu şekilde şifrelenir.J lerin sayısı(4) kelimedeki harf sayısından(11) çıkarılır.Sonuç 7 dir.Bu demektir ki J lerden önceki A harfi tek başına kalacak.O zaman tabloda A dan bir sonraki sütunda bulunan harf onun şifrelenmiş halidir.
11-)Tek karakterden oluşan stringler şifrelemez,olduğu gibi yazılırlar.
2.3. Visual Basic Kodu
Önceki makalede olduğu gibi bu yöntem için şifreleme ve deşifreleme diye iki adet alt program yazmicam çünkü bu yöntemde, şifrelenmiş kelimeyi verirseniz deşifresini elde ediosunuz . ve deşifresini verince de şifrelenmiş halini elde ediosunuz.
Bir Adet form olusturun ve asagidaki nesneleri ekleyin
1 adet Listbox -> ismi lst_matris
2 adet textbox -> biri sifrelencek kelimeyi girceeniz yer , ismi txt_sifrele. Digeri sifrelenmis kelimeyi gorceeniz yer, ismi txt_sonuc
1 adet command button -> ismi cmd_sifrele
Option Explicit
Dim i, j, k, m, n, p, r, t, sayac, c, kutu, z As Integer
Dim indis(25)
Dim dizi
Dim kelime, harf As String
Dim tablo(5, 5)
Dim uzunluk As Integer
Private Sub cmd_sifrele_Click()
kelime = UCase(txt_sifrele.Text)
uzunluk = Len(kelime) `kelime uzunlugunu hesapla
i = 0
j = 0
k = 0
t = 0
sayac = 0
While k <> uzunluk ` k kelimenin uzunluğuna eşit olmadığı sürece dön
If (Mid(kelime, k + 1, 1) = "J") Then
t = t + 1
`Bu değişken daha sonra sonda tek kalan eleman olup olmadığını
`kontrol etmeyi sağlamak amacıyla kullanılacak.J`leri aynen
`yazdığımız için bu counter`ın kullanılmaması
`programın yanlış
`çalışmasına yol açar
k = k + 1 `Bir sonraki karaktere geç
End If
While ((j < 5) And (Mid(kelime, k + 1, 1) <> tablo(i, j)))
j = j + 1
Wend
If (j < 5) Then
If (sayac = 0) Then
`Oluşacak ikilinin birinci elemanında mı yoksa
`ikinci elemanında mıyız diye kontrol ediyoruz
kutu = k
`Bunu yapmamızla program şu şekilde çalışır. Eğer TANJANT kelimesi üzerinde gösterirsek,önce N nin indislerini kaydeder daha sonra J yi geçer ve A nın indisini kaydeder ve şifrelemeyi N ve A nın indislerine göre yapar
m = i ` indisleri sakla,çünkü i ve j değişecek
n = j
sayac = sayac + 1
Else
p = i
r = j
If (m = p) Then ` Aynı satırdalar mı diye kontrol et
r = (r + 1) Mod 5
n = (n + 1) Mod 5
c = r
r = n
n = c
z = 1
` SSSSS kelimesini sifrelerken program hem bu kola
` hem de alttaki if koluna girer.Bu kola girdiğini
` anlamak için z değişkenine bir değer atanıyor
End If
If (n = r) Then ` Aynı sütundalar mı diye kontrol et
If (z = 0) Then ` üstteki if e girmediyse alttaki işlemleri yap
p = (p + 1) Mod 5
m = (m + 1) Mod 5
End If
End If
z = 0
Mid(kelime, kutu + 1, 1) = tablo(m, r)
Mid(kelime, k + 1, 1) = tablo(p, n)
sayac = 0
End If
k = k + 1
i = -1
End If
j = 0
i = (i + 1) Mod 5
Wend
n = n + 1
n = n Mod 5
If ((uzunluk - t) Mod 2 <> 0) Then
` Programın yapısına göre kelimede J harfinin olması durumu
` gözönüne alınıyor ve kelimenin uzunluğundan cıkarılıp tek
` kalan eleman olup olmadığı kontrol ediliyor.Yani sonda eşsiz
` bir eleman bulunuyorsa aşağıdaki işlemler yapılacak
If (Mid(kelime, k - 1, 1) <> "J") Then ` Son harf J değilse bir yandaki harfi al
Mid(kelime, k - 1, 1) = tablo(m, n)
Else
i = 2
While (Mid(kelime, k - i, 1) = "J") ` MATILDAJJJ gibi bir örnek için düşünülürse
` A yı görene kadar gitmemiz gerekir
i = i + 1
Mid(kelime, k - i, 1) = tablo(m, n)
Wend
End If
End If
txt_sonuc.Text = kelime
End Sub
Private Sub Form_Load()
dizi = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z")
For i = 0 To 24
indis(i) = 0 `indis dizisini sıfırla
Next i
`Dizideki elemanları 5uzunluk5 lik matrise yazıyoruz. Ayni harften birden
`fazla yazılmasını önlüyoruz
j = 0
k = 0
While (j <> 5)
Randomize
i = Int(Rnd * 25)
While (k <> 5)
If (indis(i) <> 1) Then
tablo(j, k) = dizi(i)
indis(i) = 1
k = k + 1
End If
i = Int(Rnd * 25)
Wend
k = 0
j = j + 1
Wend
`listbox a matrisi yazdir
lst_matris.Clear
For i = 0 To 4
harf = ""
For j = 0 To 4
harf = harf & " " & tablo(i, j)
Next j
lst_matris.AddItem (harf)
Next i
End Sub
2. Playfair Şifreleme Yöntemi
2.1. Algoritma
Playfair Şifreleme Yöntemi 5x5 lik bir harf matrisind yapılan belirli satır ve sütun işlemlerine dayanan bir şifredir. Farkettiğiniz gibi 5x5 lik bir matrise 25 eleman olması durumu söz konusu. İngiliz alfabesinde düşünüyoruz ve J harfini hiçbir şekilde şifrelemiyoruz. Yani 26 harfli ingiliz alfabesindeki J harfi hariç tüm harfleri şifreliyoruz. Bu harf matrisinin aynısı deşifreleme yapacak kişide de bulunmalıdır. Farz edelim ki harf matrisimiz aşağıdaki gibi oluşmuş.
A Z K L O
W X N M B
C D F E G
S Y H I P
R T U Z V
Ve diyelim ki ANNE kelimesini şifrelicez. Playfair şifreleme algoritması harfleri çiftler halinde şifreleme esasına dayanır. Yani AN harf çifti alınır ve beraber şifrelenir. Matriste A ve N harfleri bulunur
A Z K L O
W X N M B
C D F E G
S Y H I P
R T U Z V
Daha sonra A nın satırındaki ve N nin sütünundaki harf alınır ve A nın yerine yazılır. N nin satırındaki ve A nın sütunundaki harf de alınıp N nin yerine yazılır. AN harf çifti KW ye dönüşmüş oldu. Eğer aynı matriste deşifreleme yaparsanız KW nin de AN ye dönüştüğünü görürsünüz. Şimdi bu algoritmada problem yaratabilecek bazı uç noktalarını inceleyelim.
2.2. Bazı Uç Noktaları Ve Çözüm Şekilleri
1-)Şifrelemede harfler çifter çifter alınıp indis numaralarına göre şifreleme yapılıyor.Ancak son harf tek başına değerlendirilecekse,yani bir harf kaldıysa o zaman o harfin şifrelenmiş şekli kendisinden bir sonraki sütunda bulunan harftir.
2-)SS örneğinde tabloda S’den bir sonraki sütunda bulunan harf S’lerin şifrelenmiş halleri olarak kabul edilir.
3-)Aynı satırda bulunan iki harf şifrelenecekse bu harflerin şifrelenmiş şekilleri aynı satırda olan ve kendilerinden bir sonraki sütunda bulunan harflerdir.
4-)Aynı sütunda bulunan iki harf şifrelenecekse bu harflerin şifrelenmiş şekilleri aynı sütunda olan ve kendilerinden bir sonraki satırda bulunan harflerdir.
5-)Eğer kelimenin içinde J harfi varsa aynen yazılır.
6-)TANJANT kelimesinde T,A şifrelendikten sonra N harfi alınır fakat ondan sonra J olduğu için J geçilir ve A harfi alınır.Yani şifreleme sırasında kullanılan harf çifti N ve A olarak kabul edilir.
7-)JAJ kelimesi yazılırsa A dan bir sonraki sütunda bulunan harf alınır J ler aynen yazılır.
9-) Şifrelenecek harf tablonun son sütununda bulunuyorsa,bulunduğu sütunun ilk satırındaki eleman o harfin şifrelenmiş şeklidir.
10-)MATILDAJJJJ kelimesi şifrelenirken şu şekilde şifrelenir.J lerin sayısı(4) kelimedeki harf sayısından(11) çıkarılır.Sonuç 7 dir.Bu demektir ki J lerden önceki A harfi tek başına kalacak.O zaman tabloda A dan bir sonraki sütunda bulunan harf onun şifrelenmiş halidir.
11-)Tek karakterden oluşan stringler şifrelemez,olduğu gibi yazılırlar.
2.3. Visual Basic Kodu
Önceki makalede olduğu gibi bu yöntem için şifreleme ve deşifreleme diye iki adet alt program yazmicam çünkü bu yöntemde, şifrelenmiş kelimeyi verirseniz deşifresini elde ediosunuz . ve deşifresini verince de şifrelenmiş halini elde ediosunuz.
Bir Adet form olusturun ve asagidaki nesneleri ekleyin
1 adet Listbox -> ismi lst_matris
2 adet textbox -> biri sifrelencek kelimeyi girceeniz yer , ismi txt_sifrele. Digeri sifrelenmis kelimeyi gorceeniz yer, ismi txt_sonuc
1 adet command button -> ismi cmd_sifrele
Option Explicit
Dim i, j, k, m, n, p, r, t, sayac, c, kutu, z As Integer
Dim indis(25)
Dim dizi
Dim kelime, harf As String
Dim tablo(5, 5)
Dim uzunluk As Integer
Private Sub cmd_sifrele_Click()
kelime = UCase(txt_sifrele.Text)
uzunluk = Len(kelime) `kelime uzunlugunu hesapla
i = 0
j = 0
k = 0
t = 0
sayac = 0
While k <> uzunluk ` k kelimenin uzunluğuna eşit olmadığı sürece dön
If (Mid(kelime, k + 1, 1) = "J") Then
t = t + 1
`Bu değişken daha sonra sonda tek kalan eleman olup olmadığını
`kontrol etmeyi sağlamak amacıyla kullanılacak.J`leri aynen
`yazdığımız için bu counter`ın kullanılmaması
`programın yanlış
`çalışmasına yol açar
k = k + 1 `Bir sonraki karaktere geç
End If
While ((j < 5) And (Mid(kelime, k + 1, 1) <> tablo(i, j)))
j = j + 1
Wend
If (j < 5) Then
If (sayac = 0) Then
`Oluşacak ikilinin birinci elemanında mı yoksa
`ikinci elemanında mıyız diye kontrol ediyoruz
kutu = k
`Bunu yapmamızla program şu şekilde çalışır. Eğer TANJANT kelimesi üzerinde gösterirsek,önce N nin indislerini kaydeder daha sonra J yi geçer ve A nın indisini kaydeder ve şifrelemeyi N ve A nın indislerine göre yapar
m = i ` indisleri sakla,çünkü i ve j değişecek
n = j
sayac = sayac + 1
Else
p = i
r = j
If (m = p) Then ` Aynı satırdalar mı diye kontrol et
r = (r + 1) Mod 5
n = (n + 1) Mod 5
c = r
r = n
n = c
z = 1
` SSSSS kelimesini sifrelerken program hem bu kola
` hem de alttaki if koluna girer.Bu kola girdiğini
` anlamak için z değişkenine bir değer atanıyor
End If
If (n = r) Then ` Aynı sütundalar mı diye kontrol et
If (z = 0) Then ` üstteki if e girmediyse alttaki işlemleri yap
p = (p + 1) Mod 5
m = (m + 1) Mod 5
End If
End If
z = 0
Mid(kelime, kutu + 1, 1) = tablo(m, r)
Mid(kelime, k + 1, 1) = tablo(p, n)
sayac = 0
End If
k = k + 1
i = -1
End If
j = 0
i = (i + 1) Mod 5
Wend
n = n + 1
n = n Mod 5
If ((uzunluk - t) Mod 2 <> 0) Then
` Programın yapısına göre kelimede J harfinin olması durumu
` gözönüne alınıyor ve kelimenin uzunluğundan cıkarılıp tek
` kalan eleman olup olmadığı kontrol ediliyor.Yani sonda eşsiz
` bir eleman bulunuyorsa aşağıdaki işlemler yapılacak
If (Mid(kelime, k - 1, 1) <> "J") Then ` Son harf J değilse bir yandaki harfi al
Mid(kelime, k - 1, 1) = tablo(m, n)
Else
i = 2
While (Mid(kelime, k - i, 1) = "J") ` MATILDAJJJ gibi bir örnek için düşünülürse
` A yı görene kadar gitmemiz gerekir
i = i + 1
Mid(kelime, k - i, 1) = tablo(m, n)
Wend
End If
End If
txt_sonuc.Text = kelime
End Sub
Private Sub Form_Load()
dizi = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z")
For i = 0 To 24
indis(i) = 0 `indis dizisini sıfırla
Next i
`Dizideki elemanları 5uzunluk5 lik matrise yazıyoruz. Ayni harften birden
`fazla yazılmasını önlüyoruz
j = 0
k = 0
While (j <> 5)
Randomize
i = Int(Rnd * 25)
While (k <> 5)
If (indis(i) <> 1) Then
tablo(j, k) = dizi(i)
indis(i) = 1
k = k + 1
End If
i = Int(Rnd * 25)
Wend
k = 0
j = j + 1
Wend
`listbox a matrisi yazdir
lst_matris.Clear
For i = 0 To 4
harf = ""
For j = 0 To 4
harf = harf & " " & tablo(i, j)
Next j
lst_matris.AddItem (harf)
Next i
End Sub