diff --git a/ciphers/ColumnarTranspositionCipher.java b/ciphers/ColumnarTranspositionCipher.java
index b12743715..0b79bcc1b 100644
--- a/ciphers/ColumnarTranspositionCipher.java
+++ b/ciphers/ColumnarTranspositionCipher.java
@@ -1,29 +1,36 @@
-/**
+package ciphers;
+
+/**
* Columnar Transposition Cipher Encryption and Decryption.
+ *
* @author freitzzz
*/
public class ColumnarTranspositionCipher {
+
private static String keyword;
private static Object[][] table;
private static String abecedarium;
- public static final String ABECEDARIUM="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789,.;:-@";
- private static final String ENCRYPTION_FIELD="≈";
- private static final char ENCRYPTION_FIELD_CHAR='≈';
+ public static final String ABECEDARIUM = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789,.;:-@";
+ private static final String ENCRYPTION_FIELD = "≈";
+ private static final char ENCRYPTION_FIELD_CHAR = '≈';
+
/**
* Encrypts a certain String with the Columnar Transposition Cipher Rule
+ *
* @param word Word being encrypted
* @param keyword String with keyword being used
- * @return a String with the word encrypted by the Columnar Transposition Cipher Rule
+ * @return a String with the word encrypted by the Columnar Transposition
+ * Cipher Rule
*/
- public static String encrpyter(String word,String keyword){
- ColumnarTranspositionCipher.keyword=keyword;
+ public static String encrpyter(String word, String keyword) {
+ ColumnarTranspositionCipher.keyword = keyword;
abecedariumBuilder(500);
- table=tableBuilder(word);
- Object[][] sortedTable=sortTable(table);
- String wordEncrypted="";
- for(int i=0;iword.length()/keyword.length()){
- return (word.length()/keyword.length())+1;
- }else{
- return word.length()/keyword.length();
+ private static int numberOfRows(String word) {
+ if ((double) word.length() / keyword.length() > word.length() / keyword.length()) {
+ return (word.length() / keyword.length()) + 1;
+ } else {
+ return word.length() / keyword.length();
}
}
- private static Object[] findElements(){
- Object[] charValues=new Object[keyword.length()];
- for(int i=0;i(int)table[0][j]){
- Object[] column=getColumn(tableSorted,tableSorted.length,i);
- switchColumns(tableSorted,j,i,column);
+ for (int i = 0; i < tableSorted[0].length; i++) {
+ for (int j = i + 1; j < tableSorted[0].length; j++) {
+ if ((int) tableSorted[0][i] > (int) table[0][j]) {
+ Object[] column = getColumn(tableSorted, tableSorted.length, i);
+ switchColumns(tableSorted, j, i, column);
}
}
}
return tableSorted;
}
- private static Object[] getColumn(Object[][] table,int rows,int column){
- Object[] columnArray=new Object[rows];
- for(int i=0;i>> "+wordBeingEncrypted);
- System.out.println("Word encrypted ->>> "+ColumnarTranspositionCipher.encrpyter(wordBeingEncrypted,keywordForExample));
- System.out.println("Word decryped ->>> "+ColumnarTranspositionCipher.decrypter());
+ System.out.println("Word being encryped ->>> " + wordBeingEncrypted);
+ System.out.println("Word encrypted ->>> " + ColumnarTranspositionCipher.encrpyter(wordBeingEncrypted, keywordForExample));
+ System.out.println("Word decryped ->>> " + ColumnarTranspositionCipher.decrypter());
System.out.println("\n### Encrypted Table ###");
showTable();
}
diff --git a/ciphers/RSA.java b/ciphers/RSA.java
index 5baa61b04..acb99f0f6 100644
--- a/ciphers/RSA.java
+++ b/ciphers/RSA.java
@@ -2,34 +2,82 @@ package ciphers;
import java.math.BigInteger;
import java.security.SecureRandom;
+import javax.swing.JOptionPane;
/**
- * Created by Nguyen Duy Tiep on 23-Oct-17.
+ * @author Nguyen Duy Tiep on 23-Oct-17.
*/
-public class RSA {
+public final class RSA {
+
+ /**
+ * Trivial test program.
+ *
+ * @param args
+ * @deprecated TODO remove main and make JUnit Testing or any other
+ * methodology
+ */
+ public static void main(String[] args) {
+
+ RSA rsa = new RSA(1024);
+ String text1 = JOptionPane.showInputDialog("Enter a message to encrypt :");
+
+ String ciphertext = rsa.encrypt(text1);
+ JOptionPane.showMessageDialog(null, "Your encrypted message : " + ciphertext);
+
+ JOptionPane.showMessageDialog(null, "Your message after decrypt : " + rsa.decrypt(ciphertext));
+ }
+
private BigInteger modulus, privateKey, publicKey;
+ /**
+ *
+ * @param bits
+ */
public RSA(int bits) {
generateKeys(bits);
}
+ /**
+ *
+ * @param message
+ * @return encrypted message
+ */
public synchronized String encrypt(String message) {
return (new BigInteger(message.getBytes())).modPow(publicKey, modulus).toString();
}
+ /**
+ *
+ * @param message
+ * @return encrypted message as big integer
+ */
public synchronized BigInteger encrypt(BigInteger message) {
return message.modPow(publicKey, modulus);
}
- public synchronized String decrypt(String message) {
- return new String((new BigInteger(message)).modPow(privateKey, modulus).toByteArray());
+ /**
+ *
+ * @param encryptedMessage
+ * @return plain message
+ */
+ public synchronized String decrypt(String encryptedMessage) {
+ return new String((new BigInteger(encryptedMessage)).modPow(privateKey, modulus).toByteArray());
}
- public synchronized BigInteger decrypt(BigInteger message) {
- return message.modPow(privateKey, modulus);
+ /**
+ *
+ * @param encryptedMessage
+ * @return plain message as big integer
+ */
+ public synchronized BigInteger decrypt(BigInteger encryptedMessage) {
+ return encryptedMessage.modPow(privateKey, modulus);
}
- /** Generate a new public and private key set. */
+ /**
+ * Generate a new public and private key set.
+ *
+ * @param bits
+ */
public synchronized void generateKeys(int bits) {
SecureRandom r = new SecureRandom();
BigInteger p = new BigInteger(bits / 2, 100, r);
@@ -47,16 +95,4 @@ public class RSA {
privateKey = publicKey.modInverse(m);
}
- /** Trivial test program. */
- public static void main(String[] args) {
- RSA rsa = new RSA(1024);
-
- String text1 = "This is a message";
- System.out.println("Plaintext: " + text1);
-
- String ciphertext = rsa.encrypt(text1);
- System.out.println("Ciphertext: " + ciphertext);
-
- System.out.println("Plaintext: " + rsa.decrypt(ciphertext));
- }
}