-
Notifications
You must be signed in to change notification settings - Fork 0
/
CaesarCipher.java
91 lines (82 loc) · 2.25 KB
/
CaesarCipher.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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
91
public class CaesarCipher {
static char[] alphabet = "abcdefghijklmnopqrstuvwxyz".toCharArray(); // Sifreleme isleminde kullanilan alfabe
public static String encryption(String plainText,int shift)
{
assert(shift>= -(alphabet.length) && shift<=alphabet.length); // Kaydirma alfabe uzunlugu ve negatifi kadar olmalidir.
plainText = plainText.trim();
plainText=plainText.toLowerCase();
if(shift<0) shift=alphabet.length+shift; // Kaydirma negatif girilirse , ornegin -5 ; Bu 26(alfabe toplami) + (-5) = 21 kere shift gerekir.
StringBuilder cipherText=new StringBuilder();
int j=0;
for(char q:plainText.toCharArray())
{
if(!Character.isLetter(q)) // Metnin karakterlerinden biri harf degil ise o karakteri sifreli metine aktar.
{
cipherText.append(q);
continue;
}
while(j<shift)
{
if(q=='z') //Alfabenin sonuna gelindiyse tekrar basina don.
{
q='a';
q--;
}
q++;
j++;
}
cipherText.append(q);
j=0;
}
return cipherText.toString();
}
public static StringBuilder[] decryption(String cipherText)
{
cipherText = cipherText.trim();
StringBuilder[] sb=new StringBuilder[alphabet.length]; // Tum ihtimaller icin bir dizi olusturdum.
for (int i = 0; i < sb.length; i++) {
sb[i] = new StringBuilder("");
}
int j=0;
for(int i =0;i<alphabet.length;i++)
{
for(char q: cipherText.toCharArray())
{
if(!Character.isLetter(q))
{
sb[i].append(q);
continue;
}
while(j<i)
{
if(q=='a')
{
q='z';
q++;
}
q--;
j++;
}
sb[i].append(q);
j=0;
}
}
return sb;
}
public static void main(String[] args)
{
String plainText = "kirklareli universitesi yazilim muhendisligi";
System.out.println("Metnin Acik Hali :"+plainText);
String cipherText = encryption(plainText,26);
System.out.println("Metnin Sifrelenmis Hali :"+cipherText);
StringBuilder[] possibilityPlainTexts = decryption(cipherText);
System.out.println("Desifre Edilmis Metin Ihtimalleri");
System.out.println("---------------------------------");
for(StringBuilder text : possibilityPlainTexts)
{
if(plainText.equals(text.toString())) System.out.println(text +" <<<<<<<<<<<<<<<<<<<<<");
else
System.out.println(text);
}
}
}