-
Notifications
You must be signed in to change notification settings - Fork 0
/
VernamCipher.java
118 lines (104 loc) · 3.77 KB
/
VernamCipher.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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
import java.util.ArrayList;
import java.util.Arrays;
public class VernamCipher {
//Acik mesajin ve anahtar degerinin binary hallerini Xor islemine tabi tutulan metod.
public static String encryption(String plainTextBinary, String keyBinary)
{
StringBuilder cipherTextBinary = new StringBuilder();
for(int i=0;i<plainTextBinary.length();i++)
{
if(plainTextBinary.charAt(i) == keyBinary.charAt(i==0 ? 0 : i%keyBinary.length()))
{
if(plainTextBinary.charAt(i) == ' ')
cipherTextBinary.append(' ');
else
cipherTextBinary.append('0');
}
else
cipherTextBinary.append('1');
}
return cipherTextBinary.toString();
}
//Sifreli mesajin ve anahtar degerinin binary hallerini Xor islemine tabi tutulan metod.
public static String decryption(String cipherTextBinary, String keyBinary)
{
StringBuilder plainTextBinary = new StringBuilder();
for(int i=0;i<cipherTextBinary.length();i++)
{
if(cipherTextBinary.charAt(i) == keyBinary.charAt(i==0 ? 0 : i%keyBinary.length()))
{
if(cipherTextBinary.charAt(i) == ' ')
plainTextBinary.append(' ');
else
plainTextBinary.append('0');
}
else
plainTextBinary.append('1');
}
return plainTextBinary.toString();
}
//Icerisine aldigi text degerini binary(0-1 sayi dizisi) formatina cevirir.
public static String stringToBinary(String string)
{
StringBuilder binary = new StringBuilder();
for(int i=0;i<string.length();i++)
{
binary.append((Integer.toBinaryString(string.charAt(i)))+" ");
}
return binary.toString();
}
//Icerisine gelen binary diziyi karakter haline cevirir.
public static String binaryToString(String binary)
{
StringBuilder string = new StringBuilder();
String[] array = binary.split(" ");
for(int i=0;i<array.length;i++)
{
string.append((char)Integer.parseInt(array[i],2));
}
return string.toString();
}
// Metni turkce karakterlerden arindiran metod.
public static String turkce(String metin)
{
ArrayList<Character> aranan = new ArrayList<Character>();
aranan.addAll(Arrays.asList('ç','Ç','ğ','Ğ','ı','İ','ö','Ö','ş','Ş','ü','Ü'));
ArrayList<Character> yerine = new ArrayList<Character>();
yerine.addAll(Arrays.asList('c','C','g','G','i','I','o','O','s','S','u','U'));
StringBuilder str = new StringBuilder();
for(int i=0;i<metin.length();i++)
{
if(aranan.indexOf(metin.charAt(i))!=-1)
str.append(yerine.get(aranan.indexOf(metin.charAt(i))));
else
str.append(metin.charAt(i));
}
return str.toString();
}
public static void main(String[] args)
{
//Acik mesaji ekrana yazdiriyoruz..
String plainText = "softwareengineering";
System.out.println("Şifrelenecek Metin : "+plainText);
//Acik mesajin binary halini elde edip, ekrana yazdiriyoruz.
String convertPlainText=stringToBinary(plainText);
System.out.println("Şifrelenecek Metin (Binary) : " +convertPlainText);
System.out.println();
//Anahtar degerini ekrana yazdiriyoruz.
String key = "klu";
System.out.println("Şifreleme Anahtarı : "+key);
//Anahtar degerinin binary halini elde edip, ekrana yazdiriyoruz.
String convertKey=stringToBinary(key);
System.out.println("Şifreleme Anahtarı (Binary) : " +convertKey);
System.out.println();
//Acik mesajin ve anahtar degerinin binary hallerini Xor islemine tabi tutuyoruz.
String cipherTextBinary = encryption(convertPlainText,convertKey);
System.out.println("Şifreli Metin (Binary) :"+cipherTextBinary);
System.out.println();
//Şifreli mesajin ve anahtar degerinin binary hallerini Xor islemine tabi tutuyoruz.
String acik = decryption(cipherTextBinary,convertKey);
System.out.println("Açık Metin (Binary) :"+acik);
//Acik mesajin binary halini karakter haline ceviriyoruz.
System.out.println("Açık Metin : " + binaryToString(acik));
}
}