From 520ee69e342aaeec45ae6676d987f48401428415 Mon Sep 17 00:00:00 2001 From: khalil2535 Date: Sat, 14 Apr 2018 06:39:16 +0300 Subject: [PATCH] Update chiphers --- ciphers/ColumnarTranspositionCipher.java | 216 +++++++++++++---------- ciphers/RSA.java | 74 ++++++-- 2 files changed, 178 insertions(+), 112 deletions(-) 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)); - } }