bayrak

Kombinasyon sınıfı

20 06 2008

Uzunca süredir günlüğüme yazı yazmıyorum ve acaba ne karalasam diye düşünürken aklıma kombinasyon  oluşturma sınıfı yazmak geldi (artık nasıl geldiyse :) )

PHP class classCombination.tar.bz2



Vigenere Şifrelemesi (Vigenere Cipher)

6 12 2006

180px-Vigenere.jpg

Vigenere Şifreleme tekniği, 16. yüzyılda Fransa 3. Henry Kraliyet üyesi Blaise de Vigenere tarafından bulunmuştur. Burada birbiri yerine kullanılacak harfleri belirlemek için Vigenere Tablosu kullanılır. İngiliz Alfabesi için Tablo 26×26 boyutlarındadır.

180px-Confederate_cipher_disk.jpg

Şifreleme bir anahtar kullanılarak yapılır ve anahtardaki harfler tablonun başlık satırında aranır. Buna karşılık düz metindeki harf tablonun başlık sütununda aranır. Bulunan satır ve sütunun kesiştiği yerdeki harf, düz metindeki harfin yerine konarak şifreleme işlemi gerçekleştirilir.

320px-Vigenere-square.jpg

Şöyle bir örnek verebiliriz:

Anahtar kelime :LEMONLEMONLE

Düz Metin :ATTACKATDAWN

Şifreli Metin :LXFOPVEFRNHR

400px-Vigenere_letter_frequencies.PNG

Şifreli metindeki tekrar eden desenler bulunup, bunlar arasındaki uzaklık hesaplanarak anahtar uzunluğu belirlenebilir. Örneğin anahtar uzunluğu N olarak bulunursa, N tane (Anahtardaki harfler birbirinden farklı ise) tek alfabeli Yerine-Koyma şifreleme tekniği kullanıldığı anlaşılır. Bu aşamada artık her bir tek alfabeli şifreli metne, ayrı ayrı, düz metin harflerinin frekans karakteristiklerini kullanan bir saldırı gerçekleştirilebilir.

Vigenere Şifreleme tekniği ilk kez 1854’de Charles Babbage tarafından kırılmıştır. Charles’ın kullandığı frekans analizi yaklaşımı, kripto analistlere bir araç olmuştur.

Visual C++ 6 Proje dosyaları - Gozat

C# - Gözat

Kaynaklar :

http://en.wikipedia.org/wiki/Vigen%C3%A8re_cipher
http://ab.org.tr/ab05/tammetin/22.doc



Sezar şifrelemesi (Caesar Cipher)

15 05 2006

sezar shift

Tarihin ilk kriptolojik fikirleri İngilizce’de transposition and substitution cipher adını taşır, yani yer değiştirme ve harf değiştirme şifrelemesi. Bu yöntemlerden ilki bir yazıdaki harflerin yerlerini değiştirerek, ikincisi ise harfleri başka harflerle değiştirerek elde edilir. Bu şifrelemeyi kullanan belki de en ünlü teknik Sezar Şifresi’dir: bu şifrede, her harf o harften birkaç sonraki harf kullanılarak yazılır. Örneğin, 3 harf atlamalı Sezar Şifresi’nde “deneme” yerine “fğrğpğ” yazılır.

Öte yandan, Sezar Şifresi kırmak görece kolay olmaktadır: bir filolog bir dilde en çok geçen harfleri bulabilir. O harfler ile mesajda en sık geçen harfleri karşılaştırarak hangi harfin hangi harf ile değiştirildiği bulunabilir. Bu adımların ardından, mesaj çözülmüş olur..

İngilizce’deki harflerin dağılımı

alfabe histogramı

İşte bu basit şifrelemenin C ile yazılışı.

/*Author : ismail Ata Kurt
18.04.2006
*/

#include “stdafx.h”
#include “stdlib.h”

int s_ascii[] = {97,98,99,100,101,102,103,104,105,106,107,108,109,110

,111,112,113,114,115,116,117,118,119,120,121,122};

int b_ascii[] = {65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81

,82,83,84,85,86,87,88,89,90};

int caesar_crypt(char* source,char* target,int k);
char caesar_char_crypt(char chr,int k);

int caesar_decrypt(char* source,char* target,int k);
char caesar_char_decrypt(char chr,int k);

int main(int argc, char* argv[])
{
int k=1;//the shift parameter, here 1, is used as the key)

caesar_crypt(”plain_text.txt”,”encoded_text.txt”,k);//crypts plain_text.txt to encoded_text.txt
caesar_decrypt(”encoded_text.txt”,”new_plain_text.txt”,k);//decrypts encoded_text.txt to new_plain_text.txt

return 0;
}

int caesar_crypt(char* source,char* target,int k) {

int i=0;
int o=0;

FILE *sf;//Source File
FILE *tf;//Target File
char temp;

char *text = new char;

char *sig = “{top secret}”;

if ( (sf = fopen(source, “r”)) == NULL )
{
printf(”\a\aERROR: Can’t open input file!\n”);
exit(1);
}

while ( ( temp = fgetc(sf)) != EOF ) {

o++;
text[o-1] = caesar_char_crypt(temp,k);

}

if ( fclose( sf ) )
printf(”\a\aERROR: Can’t close source file!\n”);

if ( (tf = fopen(target, “w”)) == NULL )
{
printf(”\a\aERROR: Can’t open target file!\n”);
exit(1);
}

for(i=0;i< =11;i++) {
fputc(sig[i],tf);
}
for(i=0;i< =o;i++) {
fputc(text[i],tf);
}

if ( fclose( tf ) )
printf(”\a\aERROR: Can’t close target file!\n”);

return 0;
}

int caesar_decrypt(char* source,char* target,int k) {

int i=0;
int o=0;

FILE *sf;//Source File
FILE *tf;//Target File

char temp;

char *text = new char;
char *sig = “{top secret}”;

if ( (sf = fopen(source, “r”)) == NULL )
{
printf(”\a\aError: Can’t open target file!\n”);
exit(1);
}

while ( ( temp = fgetc(sf)) != EOF ) {

o++;

if(o>12) {

text[o-13] = caesar_char_decrypt(temp,k);
//printf(”%d\n”,o-13);

} else {
if(sig[o-1]!=temp){
printf(”\a\aError: Not’a ceasar cipher encoded file!\n”);
exit(1);
}
}

}

if ( fclose( sf ) )
printf(”\a\aError: Can’t close file!\n”);

if ( (tf = fopen(target, “w”)) == NULL )
{
printf(”\a\aError: Can’t open target file!\n”);
exit(1);
}

for(i=0;i< =o;i++) {

fputc(text[i],tf);
}

if ( fclose( tf ) )
printf(”\a\aError: Can’t close target file!\n”);

return 0;
}

char caesar_char_crypt(char chr,int k) {

int i=0;
int s=0;
char temp;

for(i=0;i< =25;i++) {

if(int(chr) == s_ascii[i]) {

s++;
temp = s_ascii[((k+i) % 25)];
break;

}
if(int(chr) == b_ascii[i]) {

s++;
temp = b_ascii[((k+i) % 25)];
break;

}

}

if(s >=1) {
return temp;
} else {
return chr;
}
}

char caesar_char_decrypt(char chr,int k) {

int i=0;
int s=0;
char temp;

for(i=0;i< =25;i++) {

if(int(chr) == s_ascii[i]) {

s++;
temp = s_ascii[((i-k) % 25)];
break;

}
if(int(chr) == b_ascii[i]) {

s++;
temp = b_ascii[((i-k) % 25)];
break;

}

}

if(s >=1) {
return temp;
} else {
return chr;
}
}

Microsoft VC++ 6 proje dosyaları