Skip to content

Commit d5ddc35

Browse files
Simple Substitution Cipher Algorithm added.
1 parent a1f59c3 commit d5ddc35

File tree

1 file changed

+97
-0
lines changed

1 file changed

+97
-0
lines changed

ciphers/SimpleSubstitutionCipher.java

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
package ciphers;
2+
3+
import java.util.*;
4+
5+
/**
6+
*
7+
* The simple substitution cipher is a cipher that has been in use for many hundreds of years
8+
* (an excellent history is given in Simon Singhs 'the Code Book').
9+
* It basically consists of substituting every plaintext character for a different ciphertext character.
10+
* It differs from the Caesar cipher in that the cipher alphabet is not simply the alphabet shifted,
11+
* it is completely jumbled.
12+
*
13+
* @author Hassan Elseoudy
14+
*/
15+
16+
public class SimpleSubstitutionCipher {
17+
18+
/**
19+
* Encrypt text by replacing each element with its opposite character.
20+
*
21+
* @param message
22+
* @param cipherSmall
23+
* @return Encrypted message
24+
*/
25+
public static String encode(String message, String cipherSmall) {
26+
String encoded = "";
27+
28+
// This map is used to encode
29+
Map<Character,Character> cipherMap = new HashMap<Character,Character>();
30+
31+
char beginSmallLetter = 'a';
32+
char beginCapitalLetter = 'A';
33+
34+
cipherSmall = cipherSmall.toLowerCase();
35+
String cipherCapital = cipherSmall.toUpperCase();
36+
37+
// To handle Small and Capital letters
38+
for(int i = 0; i < cipherSmall.length(); i++){
39+
cipherMap.put(beginSmallLetter++,cipherSmall.charAt(i));
40+
cipherMap.put(beginCapitalLetter++,cipherCapital.charAt(i));
41+
}
42+
43+
for(int i = 0; i < message.length(); i++){
44+
if(Character.isAlphabetic(message.charAt(i)))
45+
encoded += cipherMap.get(message.charAt(i));
46+
else
47+
encoded += message.charAt(i);
48+
}
49+
50+
return encoded;
51+
}
52+
53+
/**
54+
* Decrypt message by replacing each element with its opposite character in cipher.
55+
*
56+
* @param encryptedMessage
57+
* @param cipherSmall
58+
* @return message
59+
*/
60+
public static String decode(String encryptedMessage, String cipherSmall) {
61+
String decoded = "";
62+
63+
64+
Map<Character,Character> cipherMap = new HashMap<Character,Character>();
65+
66+
char beginSmallLetter = 'a';
67+
char beginCapitalLetter = 'A';
68+
69+
cipherSmall = cipherSmall.toLowerCase();
70+
String cipherCapital = cipherSmall.toUpperCase();
71+
72+
for(int i = 0; i < cipherSmall.length(); i++){
73+
cipherMap.put(cipherSmall.charAt(i),beginSmallLetter++);
74+
cipherMap.put(cipherCapital.charAt(i),beginCapitalLetter++);
75+
}
76+
77+
for(int i = 0; i < encryptedMessage.length(); i++){
78+
if(Character.isAlphabetic(encryptedMessage.charAt(i)))
79+
decoded += cipherMap.get(encryptedMessage.charAt(i));
80+
else
81+
decoded += encryptedMessage.charAt(i);
82+
}
83+
84+
return decoded;
85+
}
86+
87+
/**
88+
*
89+
* TODO remove main and make JUnit Testing
90+
*/
91+
public static void main(String[] args) {
92+
String a = encode("defend the east wall of the castle","phqgiumeaylnofdxjkrcvstzwb");
93+
String b = decode(a,"phqgiumeaylnofdxjkrcvstzwb");
94+
System.out.println(b);
95+
}
96+
97+
}

0 commit comments

Comments
 (0)