**DrCrypt şifreleme algoritması**, temel XOR(Özel Veya) işlemine dayanır. DrCrypt, hızlı ve
güvenilir olmak üzere geliştirilmiştir. 1 adet 2048 elemandan oluşan "Bilgi Gölgeleyici"
sabitler dizisine sahiptir. İçeriği tahmin edilmesi yüksek bilgilerin açıklarını kapatmak
ve bu sisteme fazladan güvenlik getirmek için eklenmiştir.  

DrCrypt, kullanıcının belirttiği şifreden 32 adet sabit şifreleme anahtarı ve
her bilgiye sırasına özel ve benzersiz(teoride) bir "Uzunluk Damgası" atar. Sabit dizi
elemanları("Bilgi Gölgeleyiciler") bu damganın oluşturulmasında kullanılır.  

DrCrypt algoritmasında şifreleme ve çözme işlemleri aynı yolla yapılır. Şifreleme
işlemi için önce bilgi "Uzunluk Damgası" ile XOR(Özel Veya) işlemine sokulur. Daha sonra sırası
gelen şifreleme anahtarı("32'li ") ile XOR(Özel Veya) işlemine sokulur.

Proje Detayları
---------------

**DrCrypt** herhangi bir lisans anlaşmasına bağlı olmayan özgür bir teknolojidir. Kullanım, değiştirme
ve geliştirme için izin gerektirmez.
DrCrypt projesi şu anda "Source Forge" sitesinden dağıtılmaktadır. Proje Java, .NET, Win32 platformlarını
destekler.Proje Web Sitesi 4 Aralık 2013 tarihinde Wayback Machine sitesinde arşivlendi.

DrCrypt Algoritmasının Detayları (Tam Anlatımı)
-----------------------------------------------

**Adım 1 - [ Şifreye Bağlı Sayı Üretme (Üretim Fonksiyonu) ]**  

   **a)-** Şifre uzunluğu hesaplanır.  

   **b)-** Şifre uzunluğunun n-1 \* n+1 hali hesaplanır.  

   **c)-** 0 (Sıfır)'a eşit olan geçici bir tam sayı; 1'den şifrenin uzunluğuna
   kadar kendisi, "1" (Bir, Her adımda eklenerek) ve şifrenin her char
   (karakter) değerinin ASCII tablosundaki karşılığı ile toplanır.  

   **d)-** (Şifre Uzunluğunu - 1 \* Şifre Uzunluğunu + 1) işlemi sonucuna sahip
   tam sayı, 1'den şifrenin uzunluğuna kadar kendisi, adım sayısı ve 1
   (Bir, Her adımda eklenerek) ile toplanarak hazırlanır.  

   **e)-** Şifrenin her hali ile benzersiz olması ve diziliminin değişiminden
   ötürü bir şifrenin alternatiflerinin ortaya çıkmasını engellemek için bir 
   benzersizlik prosedürü uygulanır.
   Benzersizlik prosedüründe, 1'den şifre uzunluğuna kadar şifrenin
   ilk iki karakterinden başlayarak(her adımda 1 kayarak) ilk iki
   karakterin ASCII değeri toplamı, 1. karakterin ASCII toplamı ile
   modüler aritmetik işlemine sokulur ve çıkan sonuç bir tam sayıya
   aktarılır ve her adımda sonuç bu tam sayıya eklenerek ilerler.  

   (İşlem şifre uzunluğu-1 kez sürer.)  

   Benzersizlik rakamı ASCII tablosunda birbirini takip eden
   şifreler için aynıdır ancak yine de benzersizliği sağlar.
   Karakter farkları bunu sağlar. Benzersizlik rakamı sadece
   şifrenin kullanılan karakter ve dizilimine ait bir ek
   bildirgeçtir.  

   **f)-** Sonuç olarak şifreleme çözme sayısı aşağıdaki gibi hesaplanır.
     
Şifreleme/Çözme Sayısı =   
   (bkz. madde c) Geçici Tamsayi +  

   (bkz. madde a)Sifre Uzunluğu +  

   (bkz. madde b)Sifre Uzunluk Türevi +  

   (bkz. madde e)Sifre Benzersizlik Faktörü  

   Değerlerin toplanması ile oluşan sonuç ile anahtarlar üretilir.  

**Adım 2 - [ A, B, C, D Parametrelerinin Hesaplanması ]**  

   A = Şifreleme/Çözme sayısının sayı değeri  

   B = Şifreleme/Çözme sayısının çarpmalı sayı değeri. (0'lar hariç)  

   C = 1'den Şifreleme/Çözme sayısına kadar olan asal sayıların sayısı.  

   D = 1'den Şifreleme/Çözme sayısına kadar olan ve Şifreleme/Çözme sayısı ile aralarında asal olan sayıların sayısı.  

   Yukarıdakiler hesaplandığında "T Dörtgeni" isimli bir yapı oluşur.  

   Kare değil de dörtgen denmesinin sebebi; her parametrenin bir kenarı  

   temsil etmesi ve her birinin birbirinden farklı olmasıdır.

**Adım 3 - [ Sekiz adet güçlendirilmiş "T Dörtgeni" hesaplama prosedürü. ]**

   Bu adımda Şifreleme/Çözme sayısı ile A, B, C, D parametreleri kullanılarak  

   1 olan dörtgen sayısı 8'e çıkarılır. Burada kullanılan X, Y, Z, P her adımda  

   gereken geçici tam sayı saklayıcılardır.  

   **Dörtgen 1** = (X = A Xor B), (Y = D + 1), (Z = X + 1), (P = Sayi Mod Y), (Sonuç = Z + P)  

   **Dörtgen 2** = (X = A Xor B), (Y = C + 1), (Z = X + 1), (P = Sayi Mod Y), (Sonuç = z + P)  

   **Dörtgen 3** = (X = B Xor C), (Y = A + 1), (Z = X + 1), (P = Sayi Mod Y), (Sonuç = Z + P)  

   **Dörtgen 4** = (X = B Xor C), (Y = D + 1), (Z = X + 1), (P = Sayi Mod Y), (Sonuç = Z + P)  

   **Dörtgen 5** = (X = C Xor A), (Y = B + 1), (Z = X + 1), (P = Sayi Mod Y), (Sonuç = Z + P)  

   **Dörtgen 6** = (X = C Xor A), (Y = D + 1), (Z = X + 1), (P = Sayi Mod Y), (Sonuç = Z + P)  

   **Dörtgen 7** = (X = B Xor D), (Y = C + 1), (Z = X + 1), (P = Sayi Mod Y), (Sonuç = Z + P)  

   **Dörtgen 8** = (X = B Xor D), (Y = A + 1), (Z = X + 1), (P = Sayi Mod Y), (Sonuç = Z + P)

**Adım 4) - Ham Şifreleme Anahtarları Olan M, N, O, P parametrelerinin hesaplanması**  

   ! - Bu parametreler ile 32 adet temel şifreleme anahtarı üretilecektir.  

   **M Parametresi** = (A= \_0 \* \_1), (B = A Mod \_5), (C = \_6 + B), (Sonuç = C)  

   **N Parametresi** = (A= \_4 \* \_5), (B = A Mod \_1), (C = \_2 + B), (Sonuç = C)  

   **O Parametresi** = (A= \_5 \* \_6), (B = A Mod \_2), (C = \_3 + B), (Sonuç = C)  

   **P Parametresi** = (A= \_7 \* \_6), (B = A Mod \_2), (C = \_1 + B), (Sonuç = C)

**Adım 5) - 32 Adet Temel Anahtarın Oluşturulması**  

   >>> Not: Parantezler önemlidir. İşlem sırası karışmamalıdır.  

  

   AnahtarKutusu[00] = ((((M) Xor (M)) + (M) ) \* M )  

   AnahtarKutusu[01] = ((((M) Xor (M)) + (M) ) \* N )  

   AnahtarKutusu[02] = ((((M) Xor (M)) + (N) ) \* O )  

   AnahtarKutusu[03] = ((((M) Xor (M)) + (N) ) \* P )  

   AnahtarKutusu[04] = ((((M) Xor (N)) + (O) ) \* M )  

   AnahtarKutusu[05] = ((((M) Xor (N)) + (O) ) \* N )  

   AnahtarKutusu[06] = ((((M) Xor (N)) + (P) ) \* O )  

   AnahtarKutusu[07] = ((((M) Xor (N)) + (P) ) \* P )  

   AnahtarKutusu[08] = ((((N) Xor (O)) + (M) ) \* M )  

   AnahtarKutusu[09] = ((((N) Xor (O)) + (M) ) \* N )  

   AnahtarKutusu[10] = ((((N) Xor (O)) + (N) ) \* O )  

   AnahtarKutusu[11] = ((((N) Xor (O)) + (N) ) \* P )  

   AnahtarKutusu[12] = ((((N) Xor (P)) + (O) ) \* M )  

   AnahtarKutusu[13] = ((((N) Xor (P)) + (O) ) \* N )  

   AnahtarKutusu[14] = ((((N) Xor (P)) + (P) ) \* O )  

   AnahtarKutusu[15] = ((((N) Xor (P)) + (P) ) \* P )  

   AnahtarKutusu[16] = ((((O) Xor (M)) + (M) ) \* M )  

   AnahtarKutusu[17] = ((((O) Xor (M)) + (M) ) \* N )  

   AnahtarKutusu[18] = ((((O) Xor (M)) + (N) ) \* O )  

   AnahtarKutusu[19] = ((((O) Xor (M)) + (N) ) \* P )  

   AnahtarKutusu[20] = ((((O) Xor (N)) + (O) ) \* M )  

   AnahtarKutusu[21] = ((((O) Xor (N)) + (O) ) \* N )  

   AnahtarKutusu[22] = ((((O) Xor (N)) + (P) ) \* O )  

   AnahtarKutusu[23] = ((((O) Xor (N)) + (P) ) \* P )  

   AnahtarKutusu[24] = ((((P) Xor (O)) + (M) ) \* M )  

   AnahtarKutusu[25] = ((((P) Xor (O)) + (M) ) \* N )  

   AnahtarKutusu[26] = ((((P) Xor (O)) + (N) ) \* O )  

   AnahtarKutusu[27] = ((((P) Xor (O)) + (M) ) \* P )  

   AnahtarKutusu[28] = ((((P) Xor (P)) + (O) ) \* M )  

   AnahtarKutusu[29] = ((((P) Xor (P)) + (O) ) \* N )  

   AnahtarKutusu[30] = ((((P) Xor (P)) + (P) ) \* O )  

   AnahtarKutusu[31] = ((((P) Xor (P)) + (P) ) \* P )

**Adım 6) - "Uzunluk Damgası"' nın Hesaplanması**  

   Uzunluk damgası şifreleme/çözme prosedürleri her işletildiğinde tekrar hesaplanır.

```
      a). Uzunluk Damgasi = Şifreleme/Çözme Sayisi
                            Xor
                            Yapilan Giriş Sayısı(32 bit tam sayı olarak) +
                            Bilgi Gölgeleyici(1..2048 adresindeki değerler) +
                            Golgeleyici Eleman Numarası(1..2048) +
                            Anahtar Sıra Bileti(1..32)
      b). Uzunluk Damgasi = Uzunluk Damgasi + 1
```

**DrCrypt ile 32 bit Genişliğinde Bir Tam sayı Bilginin Şifrelenmesi Ve Çözülmesi**

```
               Şifreleme için ...
                       a). Sonuç 1 = Bilgi XOR Uzunluk Damgası
                       b). Final Sonuç = Sonuç 1 XOR Anahtar(Sırası Gelen)
```

```
               Çözümleme için ...
                       a). Sonuç 1 = Bilgi XOR Uzunluk Damgası
                       b). Final Sonuç = Sonuç 1 XOR Anahtar(Sırası Gelen)
```

Çekirdek İşlem Tanımı
---------------------

Aşağıdaki Delphi(Win32) kodunda temel şifreleme/çözme yapan prosedür verilmiştir.

````
 Inc(YapilanGiris); { Yapılan INT32 giriş sayısı (GirisSayisi/4 = Byte Sayısı) }  

 Inc(GolgeleyiciElemanNo); { Gölgeleyici Eleman Numarası Artışı }  

 Inc(SiraBileti); { Anahtar Sıra Bileti }  

 if GolgeleyiciElemanNo = 2048 then  

   begin  

     GolgeleyiciElemanNo := 0;  

   end;  

 if SiraBileti = 32 then  

   begin  

     SiraBileti := 0;  

   end;  

 { 32 bit işlemcili bilgisayarlarda bilgi kaybı ve hafıza taşmasını  

   engellemek için yapılmış bir düzeltmedir. INT32 değerinin pozitif  

   maximum tepe değerinden fazla olan her giriş düzeltilir. }  

 if YapilanGiris >= High(Tamsayi) then  

   begin  

     YapilanGiris := Abs((YapilanGiris) - (High(Tamsayi)));  

   end;  
    
   UzunlukDamgasi := (SifrelemeCozmeSayisi) Xor   

                     (YapilanGiris + BilgiGolgeleyici[GolgeleyiciElemanNo] + GolgeleyiciElemanNo + SiraBileti);  

 Inc(UzunlukDamgasi); { Uzunluk Damgasının Tam Benzersizliğini  

   (teorik olarak) sağlar. Uygulamada benzersizlik bozulabilmektedir. }  

   { Bilginin int32 formatında uzunluğu ve konumu sayesinde elde ettiği  

     benzersiz uzunluk damgası. XOR gibi basit bir yöntemi zorlaştıran  

     en temel etkenlerden birisi budur.}  

 if UzunlukDamgasi >= High(Tamsayi) then  

   begin  

     UzunlukDamgasi := Abs((UzunlukDamgasi) - (High(Tamsayi)));  

   end;  

   tmp1 := ((Bilgi) Xor ((UzunlukDamgasi))); { Şifreleme ADIM 1 }  

   tmp2 := ((tmp1)  Xor (AnahtarKutusu[SiraBileti])); { Şifreleme ADIM 2 }  

   Result := tmp2; { Bilgi Başarıyla Şifrelendi }
````

Kaynakça
--------

 4 Aralık 2013 tarihinde Wayback Machine sitesinde arşivlendi.