Yazan: Şadi Evren ŞEKER

Şifrelenmiş bir metine saldırı yöntemlerinden birisi de frekans analizi yapmaktır. Bu yöntemde, metinde bulunan harf sıklıklarına göre bir frekans tablosu oluşuturulur. Bu tablo orjinal mesajın gönderildiği frekans sıklıkları ile karşılaştırılır ve karakteristik bazı harfler tahmin edilebilir.

Örneğin ingilizce’de e harfi diğer harflere nazaran daha sık kullanılmaktadır. Bu durumda şifrelenmiş metinde en çok geçen harf muhtemelen e harfidir denilebilir.

Aşağıdaki resimde inigilizce dilindeki harflerin frekansları verilmiştir.
Frekans analizi

 

Kodlama

Gelen talep üzerine frekans analizi yapan kodu da yazıya ekliyorum.

 

#include 
#include 
main() {

int karakterler[256] = {0}, toplam = 0, say = 0, c = 0;
FILE *FP;
FP = fopen("a.txt","r");

while ((c = fgetc(FP)) != EOF) {
    karakterler[c]++;
    say++;
  }

printf("karakter [ASCII kodu]: (yüzde) sayısı\n");

for (c = 0; c < 255; c++) { 
    if (karakterler[c] > 0 ){
      printf("%c [%d]: (%0.3f) %d\n", c, c, (karakterler[c]*100)/(float)say, karakterler[c]);
      toplam += karakterler[c];
    }
  }
printf("Toplam karakter sayisi: %d/%d\n", toplam, say);
}

Aynı kaynak kodu girdi olarak verdiğimizde (yani a.txt dosyasının içeriğine kaynak kodu kaydediyorum) çalışma aşağıdaki şekilde çıktı vermektedir:

Sadis-MacBook-Pro:~ sadievrenseker$ vi dene.c 
Sadis-MacBook-Pro:~ sadievrenseker$ g++ dene.c
clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated
Sadis-MacBook-Pro:~ sadievrenseker$ ./a.out
karakter [ASCII kodu]: (yüzde) sayısı

 [10]: (4.423) 23
  [32]: (16.731) 87
! [33]: (0.192) 1
" [34]: (1.923) 10
# [35]: (0.385) 2
% [37]: (1.154) 6
( [40]: (2.692) 14
) [41]: (2.692) 14
* [42]: (0.385) 2
+ [43]: (1.346) 7
, [44]: (1.923) 10
. [46]: (0.769) 4
/ [47]: (0.385) 2
0 [48]: (1.731) 9
1 [49]: (0.192) 1
2 [50]: (0.385) 2
3 [51]: (0.192) 1
5 [53]: (0.577) 3
6 [54]: (0.192) 1
: [58]: (0.577) 3
; [59]: (2.115) 11
< [60]: (0.577) 3
= [61]: (1.731) 9
> [62]: (0.577) 3
A [65]: (0.192) 1
C [67]: (0.192) 1
E [69]: (0.385) 2
F [70]: (0.962) 5
I [73]: (0.577) 3
L [76]: (0.192) 1
O [79]: (0.192) 1
P [80]: (0.577) 3
S [83]: (0.192) 1
T [84]: (0.192) 1
[ [91]: (1.538) 8
\ [92]: (0.577) 3
] [93]: (1.538) 8
a [97]: (5.577) 29
b [98]: (0.192) 1
c [99]: (3.077) 16
d [100]: (1.923) 10
e [101]: (3.846) 20
f [102]: (1.731) 9
g [103]: (0.192) 1
h [104]: (0.577) 3
i [105]: (2.500) 13
k [107]: (3.269) 17
l [108]: (2.885) 15
m [109]: (0.962) 5
n [110]: (2.115) 11
o [111]: (1.731) 9
p [112]: (1.538) 8
r [114]: (5.192) 27
s [115]: (1.923) 10
t [116]: (4.038) 21
u [117]: (0.577) 3
w [119]: (0.192) 1
x [120]: (0.192) 1
y [121]: (1.346) 7
z [122]: (0.192) 1
{ [123]: (0.962) 5
} [125]: (0.962) 5
? [177]: (0.385) 2
? [188]: (0.192) 1
? [195]: (0.192) 1
? [196]: (0.385) 2
Toplam karakter sayisi: 520/520
Sadis-MacBook-Pro:~ sadievrenseker$

Yorumlar

  1. İmay

    Hocam merhabalar, yazılarınızı ve kodlarınızı incelerken rastladım bu koda. Kodda integer tipinde c diye bir değişken yazmışsınız. Bunun nedeni nedir? “c” değişkeni kodda tam olarak ne iş yapıyor?

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir