Ana içeriğe atla

SEZAR ŞİFRELEME ALGORİTMASI NEDİR?

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

Bu blogdaki popüler yayınlar

Java Veri Tipleri ve Değişkenler

  Java Veri Tipleri ve Değişkenler Bu yazımda Java da değişken tanımlama hakkına bilgi vereceğim. Bu bilgiler değişken nedir, değişken tanımlama kuralları nelerdir ve değişken tanımlarken kullanabilceğimiz veri tipleri hakkında olacaktır. Değişken Nedir? Program yazarken, bazı verilerin daha sonra kullanılmak üzere bir yerde tutulması gerekebilir. Bunun için değişkenlere başvurulur. Yani değişkenler bizim için bellekte yer ayıran göstergeçlerdir. Değişkenler farklı türde verileri tuttukları için, farklı tiplere sahip olabilirler. Bir negatif veya pozitif sayıyı tutan değişken ile yazı tutan bir değişken farklı tiplere sahiptirler. Değişken Tanımlama Kuralları Her dilin olduğu gibi programlama dillerinin de kendi içinde belli kuralları var. Bu kurallara uyarak yorumlayıcıya veya derleyiciye kodunuzu doğru biçimde ifade edebilirsiniz. Bu kurallara bakacak olursak ; ·          Bir değişken yazarken   önce  ...

Java Döngüler

JAVA – DÖNGÜLER ·          Arkadaşlar en başta sizi örnekleri kendiniz çalıştırırken proje ve class isimlerinin farklı olması durumundan çalışmama gibi bir durum olacağı için uyarmak istiyorum. Kendi programınızın ismine göre değiştirmeyi unutmayınız. Yazılan programlarda bazen belli komut parçalarının birçok kez çalışması gerekebilir. Yani bazı komut parçalarının, belli şartlar altında tekrar tekrar işlenmesi gerekebilir. Döngü deyimleri, bahsedilen komut parçalarının belirtilen şartlar gerçekleştikçe tekrar tekrar işlenmesini sağlar.  Java’da üç tür döngü vardır. Bunlar; “for”, “do-while” ve “while” döngüleridir. Bu döngülerden for ve while döngüsünde, koşul sınaması döngüye girmeden önce yapılırken, do-while döngüsünde koşul sınaması bir kod parçası çalıştıktan sonra yapılır. For Döngüsü İstenen deyim(ler)in kaç kez tekrarlanacağı biliniyorsa, for döngü yapısını kullanmak kolaydır. Tekrarlanacak deyim tek ise sözdizi...