PetrovIgor

Narimanova_LR2

Mar 6th, 2012
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5 6.50 KB | None | 0 0
  1. //Class Starter.java
  2.  
  3. package od.igor.petrov;
  4.  
  5. import java.util.Scanner;
  6.  
  7. public class Starter {
  8.     public static void main(String ... args){
  9.         Scanner scanner = new Scanner(System.in);
  10.         String key = null;
  11.         String message = null;
  12.         int choise = 0;
  13.         System.out.println("Begin here (c) By Kravchenko Stanislav");
  14.         System.out.println("Put the key");
  15.         key = scanner.nextLine();
  16.         System.out.println("Put the message");
  17.         message = scanner.nextLine();
  18.         System.out.println("\t1 - Crypt message\n\t2 - Decrypt message");
  19.         choise = scanner.nextInt();
  20.         switch (choise) {
  21.         case 1:
  22.             Cryptor.doCryptAndPrint(key, message);
  23.             break;
  24.         case 2:
  25.             Decryptor.doDecryptAndPrint(key, message);
  26.             break;
  27.         default:
  28.             System.out.println("Got a mistake");
  29.             break;
  30.         }
  31.     }
  32. }
  33. //
  34. //===============================================================
  35. //
  36. //Class Cryptor.java
  37. package od.igor.petrov;
  38.  
  39. /**
  40.  * @author Igor Petrov, Gaidarji Gennadiy, Kravchenko Stanislav, AE081
  41.  * Lab. work 2.
  42.  */
  43.  
  44. import java.util.Arrays;
  45.  
  46. public class Cryptor {
  47.    
  48.     private Cryptor(String key, String message){
  49.         this.key = key;
  50.         this.message = message;
  51.     }
  52.    
  53.     /**
  54.      * Permutation cipher algorithm
  55.      * @refer http://en.wikipedia.org/wiki/Permutation_cipher
  56.      */
  57.     protected void cryptIt() {
  58.        
  59.         char[][] firstCaseCryptedMessage = new char[arrayHeightCalculatorLogic()][key.length()];
  60.         char[][] lastCaseCryptedMessage = new char[arrayHeightCalculatorLogic()][key.length()];
  61.        
  62.         //PHASE 1. Preparation
  63.         int reservCounter = 0;
  64.         for(int i = 0; i < arrayHeightCalculatorLogic() ; i++){
  65.             for(int j = 0; j <  key.length() && reservCounter < message.length(); j++){
  66.                 firstCaseCryptedMessage[i][j] = message.charAt(i*key.length() + j);
  67.                 reservCounter++;
  68.             }
  69.         }
  70.        
  71.         char[] myTemporaryKey = key.toCharArray();
  72.         Arrays.sort(myTemporaryKey);
  73.        
  74.        
  75.         //PHASE 2. Changing matrix
  76.         int index = 0;
  77.         for(int i = 0; i < myTemporaryKey.length; i++){
  78.             index = key.indexOf(myTemporaryKey[i]);
  79.             for(int j = 0; j < arrayHeightCalculatorLogic(); j++){
  80.                 //System.out.printf("Try to move %d,%d to %d,%d\n", j, i, j, index);
  81.                 lastCaseCryptedMessage[j][i] = firstCaseCryptedMessage[j][index];
  82.             }
  83.         }
  84.        
  85.         setCryptedMessage(lastCaseCryptedMessage);
  86.        
  87.     }
  88.    
  89.    
  90.     /**
  91.      *
  92.      * @return maximum height of newborn message array
  93.      */
  94.     protected int arrayHeightCalculatorLogic(){
  95.         int tmp = message.length() % key.length();
  96.         int result = (message.length() - tmp) / key.length();
  97.         if(tmp != 0){
  98.             result++;
  99.         }
  100.         return result;
  101.     }
  102.    
  103.     /**
  104.      * Generates from array-view message to String Object
  105.      * @param msg
  106.      */
  107.     protected void setCryptedMessage(char [][] msg) {
  108.         StringBuffer buff = new StringBuffer();
  109.         for(int i = 0; i < arrayHeightCalculatorLogic(); i++){
  110.             for(int j = 0; j <  key.length(); j++){
  111.                 buff.append(msg[i][j]);
  112.             }
  113.         }
  114.         cryptedMessage = buff.toString();
  115.     }
  116.    
  117.     protected boolean isValid() {
  118.         char[] myKey = key.toCharArray();
  119.         Arrays.sort(myKey);
  120.         for(int i = 0; i < myKey.length - 1; i++){
  121.             if(myKey[i] == myKey[++i]){
  122.                 return false;
  123.             }
  124.         }
  125.         return true;
  126.     }
  127.    
  128.    
  129.     /**
  130.      * The only public-accessed method to crypt the message
  131.      * @param key to be used ass pass-key
  132.      * @param message - message to be crypted
  133.      */
  134.     public static void doCryptAndPrint(String key, String message){
  135.         Cryptor cryptor = new Cryptor(key, message);
  136.         cryptor.cryptIt();
  137.        
  138.         if(cryptor.isValid()){
  139.             StringBuffer buff = new StringBuffer();
  140.             buff.append("You entered message: ");
  141.             buff.append(message);
  142.             buff.append("\n");
  143.             buff.append("You entered key: ");
  144.             buff.append(key);
  145.             buff.append("\nCription finished!\n");
  146.             buff.append(cryptor.cryptedMessage);
  147.            
  148.             System.out.println(buff.toString());
  149.         } else {
  150.             System.out.println("Inconsistent key. Do not repeat symbols");
  151.         }
  152.     }
  153.    
  154.     private String key = null;
  155.     private String message = null;
  156.     private String cryptedMessage = null;
  157. }
  158. //
  159. //===============================================================
  160. //
  161. //Class Decryptor.java
  162.  
  163. package od.igor.petrov;
  164.  
  165. /**
  166.  * @author Igor Petrov, Gaidarji Gennadiy, Kravchenko Stanislav, AE081
  167.  * Lab. work 2.
  168.  */
  169.  
  170. import java.util.Arrays;
  171.  
  172. public class Decryptor {
  173.     private Decryptor(String key, String message){
  174.         this.key = key;
  175.         this.message = message;
  176.     }
  177.    
  178.     protected void decryptIt() {
  179.         char[][] cryptedMessage = new char[arrayHeightCalculatorLogic()][key.length()];
  180.         char[][] decryptedMessage = new char[arrayHeightCalculatorLogic()][key.length()];
  181.        
  182.         for(int k = 0, i = 0, j = 0; k < message.length(); k++){
  183.             cryptedMessage[i][j] = message.charAt(k);
  184.             j++;
  185.             if(j == key.length()){
  186.                 j = 0;
  187.                 i++;
  188.             }
  189.         }
  190.        
  191.         char[] myTemporarySortedKey = key.toCharArray();
  192.         Arrays.sort(myTemporarySortedKey);
  193.        
  194.         int index = 0;
  195.         for(int i = 0; i < myTemporarySortedKey.length; i++){
  196.             index = key.indexOf(myTemporarySortedKey[i]);
  197.             for(int j = 0; j < arrayHeightCalculatorLogic(); j++){
  198.                 decryptedMessage[j][index] = cryptedMessage[j][i];
  199.             }
  200.         }
  201.        
  202.         setDecryptedMessage(decryptedMessage);
  203.     }
  204.    
  205.     protected int arrayHeightCalculatorLogic(){
  206.         int tmp = message.length() % key.length();
  207.         int result = (message.length() - tmp) / key.length();
  208.         if(tmp != 0){
  209.             result++;
  210.         }
  211.         return result;
  212.     }
  213.    
  214.     protected void setDecryptedMessage(char [][] msg) {
  215.         StringBuffer buff = new StringBuffer();
  216.         for(int i = 0; i < arrayHeightCalculatorLogic(); i++){
  217.             for(int j = 0; j <  key.length(); j++){
  218.                 buff.append(msg[i][j]);
  219.             }
  220.         }
  221.         decryptedMessage = buff.toString();
  222.     }
  223.    
  224.     protected boolean isValid() {
  225.         char[] myKey = key.toCharArray();
  226.         Arrays.sort(myKey);
  227.         for(int i = 0; i < myKey.length - 1; i++){
  228.             if(myKey[i] == myKey[++i]){
  229.                 return false;
  230.             }
  231.         }
  232.         return true;
  233.     }
  234.    
  235.     public static void doDecryptAndPrint(String key, String message){
  236.         Decryptor decryptor = new Decryptor(key, message);
  237.         decryptor.decryptIt();
  238.        
  239.         if(decryptor.isValid()){
  240.             StringBuffer buff = new StringBuffer();
  241.             buff.append("You entered message: ");
  242.             buff.append(message);
  243.             buff.append("\n");
  244.             buff.append("You entered key: ");
  245.             buff.append(key);
  246.             buff.append("\nDecription finished\n");
  247.             buff.append(decryptor.decryptedMessage);
  248.            
  249.             System.out.println(buff.toString());
  250.         } else {
  251.             System.out.println("Inconsistent key. Do not repeat symbols");
  252.         }
  253.     }
  254.    
  255.     private String key = null;
  256.     private String message = null;
  257.     private String decryptedMessage = null;
  258. }
  259. // THE END
  260. //========================
Advertisement
Add Comment
Please, Sign In to add comment