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 <stdio.h>
#include <stdlib.h>
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

Bir Cevap Yazın

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


yedi + 6 =