-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrailfence.java
67 lines (65 loc) · 1.62 KB
/
railfence.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
import java.util.*;
class Main{
private static class RailFence{
String encrypt(String plainText, int key){
String[] rails = new String[key];
Arrays.fill(rails,"");
int flag = 1, rail = 0;
for(int i = 0; i < plainText.length(); i++){
rails[rail] += plainText.charAt(i);
if(rail == key-1)
flag = -1;
else if(rail == 0)
flag = 1;
rail += flag;
}
for(int i = 1; i < key; i++)
rails[0] += rails[i];
return rails[0];
}
String decrypt(String cipherText, int key){
int size[] = new int[key];
String[] rails = new String[key];
Arrays.fill(rails,"");
int flag = 1, rail = 0;
for(int i = 0; i < cipherText.length(); i++){
size[rail] += 1;
if(rail == key-1)
flag = -1;
else if(rail == 0)
flag = 1;
rail += flag;
}
rail = 0;
for(int i = 0; i < key; i++){
rails[i] = cipherText.substring(rail, rail+size[i]);
rail += size[i];
size[i] = 0;
}
String plainText = "";
rail = 0;
for(int i = 0; i < cipherText.length(); i++){
plainText += rails[rail].charAt(size[rail]);
size[rail] += 1;
if(rail == key-1)
flag = -1;
else if(rail == 0)
flag = 1;
rail += flag;
}
return plainText;
}
}
public static void main(String args[]){
Scanner in = new Scanner(System.in);
System.out.printf("Enter plainText: ");
String text = in.nextLine();
System.out.printf("Enter number of rails: ");
int key = in.nextInt();
RailFence cipher = new RailFence();
text = cipher.encrypt(text, key);
System.out.println("cipherText: "+text);
text = cipher.decrypt(text, key);
System.out.println("plainText: "+text);
}
}