Bifid
şifreleme de, 5x5 bir matris alınır, satır ve sütunlar numaralandırılır.
Bu matris bizim rasgele oluşturacağımız matristir. 5x5 olabileceği gibi,7x7
veya 8x8 gibi orantılı büyüklüklerde matris oluşturabiliriz.
Mesajı sabit
sayıda harf içeren parçalara ayrılır, daha sonra her harfin altına satır ve
kolon numaraları yazılır. Bu sayede matrisimizde satır ve sütun rakamlarını
kullanmış oluruz. Gruplamalar matrisin satır veya sütun büyüklüğü kadardır.
ve daha
sonra her grup içinde kalarak sayıları sırasıyla 11555 14535 52453 33435 . . .
şeklinde okuyup ikili rakamlardan oluşan 11 55 51 45 35 52 . . . şeklindeki
parçalara ayrılır. Ve bu parçaların tablodaki harf karşılıkları bize gizli bir
mesaj verecektir.
Şifrelenmiş
rakamımız bu sayede elimize geçmiş olacaktır.
Bu şifreleme
için kullandığım arayüz aşağıdadır. Konsol uygulaması olarak sade bir arayüz
kullandım.
class Program
{
static void Main(string[] args)
{
string d;
do{
Bifid bfd = new
Bifid();
Console.WriteLine("\nBifid
Şifreleme");
Console.WriteLine("Açmak
için 1");
Console.WriteLine("Şifreleme
için 2");
Console.WriteLine("Çıkmak
için 5");
d=Console.ReadLine();
if(d=="1"){
string msj;
string don;
Console.WriteLine("Decrypt
yapılacak mesajı girin");
msj = Console.ReadLine();
don=bfd.EncryptDecrypt(msj, false);
Console.Write(don);
}
else if(d=="2"){
string msj;
string don;
Console.WriteLine("Encrypt
yapılacak mesajı girin");
msj = Console.ReadLine();
don = bfd.EncryptDecrypt(msj, true);
Console.WriteLine(don);
}
else if(d=="5")
break;
else
Console.WriteLine("Lütfen
seçim yağınız çıkış için 5");
}while(d!="5");
}
}
Bifid
Algoritması için bifid şifreleme sınıfım;
public class Bifid
{
string[,] KeyMatrix = new
string[5, 5];
public Bifid()
{
BuildKeyMatrix();
}
private void
BuildKeyMatrix()
{
int k = 65;
for (int i = 0;
i < 5; i++)
{
for (int j = 0;
j < 5; j++)
{
if (k == 74) { k++; } //
j’yi alma (j ascii = 64)
KeyMatrix[i, j] = ((char)k).ToString();
k++;
}
}
}
public string
EncryptDecrypt(string Text, bool Encrypt)
{
int k = 0;
string CharofMessage = string.Empty;
StringBuilder sb1 = new
StringBuilder();
StringBuilder sb2 = new
StringBuilder();
StringBuilder sbOut = new StringBuilder();
bool HasGotChar = false;
while (k < Text.Length)
{
CharofMessage = Text.Substring(k, 1);
for (int i = 0;
i < 5; i++)
{
for (int j = 0;
j < 5; j++)
{
if (string.Compare(KeyMatrix[i,
j], CharofMessage, true) == 0)
{
sb1.Append(i.ToString());
if (Encrypt)
sb2.Append(j.ToString());
else
sb1.Append(j.ToString());
HasGotChar = true;
break;
}
}
if (HasGotChar)
{
HasGotChar = false;
break;
}
}
k++;
}
k = 0;
if (Encrypt)
{
sb1.Append(sb2.ToString());
while (k < sb1.Length)
{
sbOut.Append(KeyMatrix[Convert.ToInt32(sb1[k].ToString()),
Convert.ToInt32(sb1[k + 1].ToString())]);
k += 2;
}
}
else
{
int SplitNum = (sb1.Length) / 2;
while (k < SplitNum)
{
sbOut.Append(KeyMatrix[Convert.ToInt32(sb1[k].ToString()),
Convert.ToInt32(sb1[k +
SplitNum].ToString())]);
k++;
}
}
return sbOut.ToString();
}
}
Hiç yorum yok:
Yorum Gönder