Bu şifreleme tekniği şöyle işlemekte. Sizin
şifrelenmesini istediğiniz bir kelime ya da veri mevcut diyelim. Bizim bir
anahtar değer belirlememiz gerekmekte. Bu anahtar değeri bir rakam olmalı. Bu
anahtar değeri kadar verilen kelimedeki harfleri öteliyoruz.
Basitçe gelen kelimenin
içeriğine bakılıyor ve şayet mesaj ascii tablosundaki büyük harflere tekabül ediyorsa (65
büyük A ve 90 büyük Z olduğuna göre, bu sayılar arasındaysa) veya küçük harfe
tekabül ediyorsa (97 küçük a ve 127 küçük z harfleri arasındaysa) bu durumda
anahtar miktarı arttırma yapılır.
Anahtar miktarı arttıktan sonra, z harfinden sonraki bir harfe
gelirse modu alınıp a harfi kadar ekleme yapılır. Örneğin z harfini ( ascii değeri 127) anahtar değeri olan 2 kadar
arttırdığımızı düşünelim, bu durumda değeri 129 gibi bizim için anlamsız bir
harf olacak, bu değerin mod 127 karşılığı alınıp ‘a’ harfinin değeri eklenir,
sonuçta 129 % 127 = 2 + 97 = 99 olur ki bu değer c harfidir. Mesela anahtar değeri 2 olan
örneğimize görsel üzerinde bakalım:
Sezar Şifreleme Algoritması Java Kodu ve Metodlar:
package sezarSifreleme;
import java.util.Scanner;
public class sezarSifreleme {
public static
void Sifrele()
{
Scanner
scan=new Scanner (System.in);
System.out.println("kelime giriniz:
");
String ad=scan.nextLine();
System.out.println("öteleme miktarı
giriniz: ");
int otele=scan.nextInt();
char [] alfabe=new char [52];
int k=0,tut;
for (int i = 65; i <91; i++) {
alfabe[k]=(char) i;
k++;
}
for (int i =97; i < 123; i++) {
alfabe[k]=(char) i;
k++;
}
for (int i = 0; i < ad.length();
i++) {
for (int j = 0; j < 52; j++) {
if(ad.charAt(i)==alfabe[j]){
if(j<26){
tut=j+otele;
tut%=26;
System.out.print((char)
alfabe[tut]);
}
else {
tut=j+otele;
if(tut>51){
tut=(tut%52)+26;
System.out.print((char)
alfabe[tut]);break;
}
else
tut=(tut%52);
System.out.print((char)
alfabe[tut]);
}
}
}
}
scan.close();
}
public static
void SifreCoz()
{
Scanner
scan=new Scanner (System.in);
System.out.println("Şifrelenmiş
kelimeyi giriniz: ");
String ad=scan.nextLine();
System.out.println("Gerileme miktarı
giriniz: ");
int otele=scan.nextInt();
char [] alfabe=new char [52];
int k=0,tut;
for (int i = 65; i <91; i++) {
alfabe[k]=(char) i;
k++;
}
for (int i =97; i < 123; i++) {
alfabe[k]=(char) i;
k++;
}
for (int i = 0; i < ad.length();
i++) {
for (int j = 0; j < 52; j++) {
if(ad.charAt(i)==alfabe[j]){
if(j<26){
tut=j-otele;
tut%=26;
System.out.print((char)
alfabe[tut]);
}
else {
tut=j-otele;
if(tut>51){
tut=(tut%52)+26;
System.out.print((char)
alfabe[tut]);
break;
}
else
tut=(tut%52);
System.out.print((char)
alfabe[tut]);
}
}
}
}
scan.close();
}
public static
void main(String[] args)
{
System.out.println("Şifrelemek için
[1] Şifre çözmek için [2] giriniz:");
Scanner scn = new Scanner(System.in);
int secim = scn.nextInt();
if(secim==1)
Sifrele();
else if(secim==2)
SifreCoz();
else
System.out.println("Geçerli
bir seçim yapınız!");
scn.close();
}
}
·
Scanner scan=new Scanner (System.in) à Bu satırda Scanner
sınıfında scan adında bir nesne üretiyoruz.
·
String ad=scan.nextLine() à Bu satırda scan nesnesine nextLine komutu ile metin
türündeki girilen veriyi ad değişkenine atıyoruz.
·
int otele=scan.nextInt() à Bu satırda scan nesnesine nextLine komutu
ile tam sayı türünde girilen anahtar değerini otele değişkenine atıyoruz.
·
char [] alfabe=new char [52] à Bu satırda 52 harflik alfabe adında bir
karakter türünde bir dizi oluşturuyoruz.
·
(ad.charAt(i)==alfabe[j]) à Burada charAt komutu ile ad değişkenindeki belirtilen
indexdeki karakteri döndürür.
Sezar Şifreleme Algoritması C# Kodu ve Metodlar:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace sezarSifreleme
{
class Program
{
public static void Sifrele()
{
char[] kr = new char[52];
int say = 0;
for (char i = 'a'; i <= 'z'; i++)
{
kr[say] = i;
say++;
}
for (char i = 'A'; i <= 'Z'; i++)
{
kr[say] = i;
say++;
}
Console.Write("Şifrelenecek
metni girin :");
string metin = Console.ReadLine();
Console.Write("Şifreleme
adımını girin :");
int adim = Convert.ToInt16(Console.ReadLine());
char[] sifreli = new char[metin.Length];
for (int i = 0; i < metin.Length;
i++)
{
if (Array.IndexOf(kr, metin[i])
!= -1)
{
sifreli[i] = kr[(Array.IndexOf(kr,
metin[i]) + adim) % 52];
}
else
{
sifreli[i] = metin[i];
}
}
for (int i = 0; i < sifreli.Length;
i++)
{
Console.Write(sifreli[i]);
}
Console.ReadKey();
}
public static void SifreCoz()
{
char[] kr = new char[52];
int say = 0;
for (char i = 'a'; i <= 'z'; i++)
{
kr[say] = i;
say++;
}
for (char i = 'A'; i <= 'Z'; i++)
{
kr[say] = i;
say++;
}
Console.Write("Şifrelenmiş
metni giriniz :");
string metin = Console.ReadLine();
Console.Write("Gerileme
miktarını giriniz :");
int adim = Convert.ToInt16(Console.ReadLine());
char[] sifreli = new char[metin.Length];
for (int i = 0; i < metin.Length;
i++)
{
if (Array.IndexOf(kr, metin[i])
!= -1)
{
sifreli[i] = kr[(Array.IndexOf(kr,
metin[i]) - adim) % 52];
}
else
{
sifreli[i] = metin[i];
}
}
for (int i = 0; i < sifreli.Length;
i++)
{
Console.Write(sifreli[i]);
}
Console.ReadKey();
}
static void Main(string[] args)
{
Console.WriteLine("Şifrelemek
için [1] Şifre çözmek için [2] giriniz:");
int secim = Convert.ToInt16(Console.ReadLine());
if (secim == 1)
Sifrele();
else if (secim == 2)
SifreCoz();
else
Console.WriteLine("Geçerli
bir seçim yapınız!");
}
}
}
Yorumlar
Yorum Gönder