Saturday, November 7, 2015

Odd Even Caesar Cipher

Same concept as Caesar cipher but we do alternating even and odd shifting. For even, shift to the right and for the odd, shift it the left.

For example: SAYA MAKAN NASI

Cipher     : XVDV HFFFI IFNN


To decrypt it just start from odd shift. For decrypt without key, try from 1-26 shifting method. :)



  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
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import java.util.*;
import java.io.*;

public class OddEvenCaesar{
    
    public static void main(String[] args){
      System.out.print(Encode("Saya makan nasi",5));
      System.out.print(Decode("Xvdv hfffi ifnn",5));
      DecodeNoKey("Xvdv hfffi ifnn");
    }
    
    public static String Encode(String enc, int offset) {
        offset = offset % 26;
        StringBuilder encoded = new StringBuilder();
        
        int count =0;
        
        for (char i : enc.toCharArray()) {
            if(count%2 == 0){
               if (Character.isLetter(i)) {
                   if (Character.isUpperCase(i)) {
                       encoded.append((char) ('A' + (i - 'A' + offset) % 26 ));
                   } else {
                       encoded.append((char) ('a' + (i - 'a' + offset) % 26 ));
                   }
               } else {
                   encoded.append(i);
               }
            }
            else if(count%2 == 1){
               if (Character.isLetter(i)) {
                   if (Character.isUpperCase(i)) {
                       encoded.append((char) ('A' + (i - 'A' + 26-offset) % 26 ));
                   } else {
                       encoded.append((char) ('a' + (i - 'a' + 26-offset) % 26 ));
                   }
               } else {
                   encoded.append(i);
               }
            }
            
            count++;
        }
        return encoded.toString();
    }
    
    public static String Decode(String enc, int offset) {
        offset = offset % 26;
        StringBuilder decoded = new StringBuilder();
        
        int count =0;
        
        for (char i : enc.toCharArray()) {
            if(count%2 == 1){
               if (Character.isLetter(i)) {
                   if (Character.isUpperCase(i)) {
                       decoded.append((char) ('A' + (i - 'A' + offset) % 26 ));
                   } else {
                       decoded.append((char) ('a' + (i - 'a' + offset) % 26 ));
                   }
               } else {
                   decoded.append(i);
               }
            }
            else if(count%2 == 0){
               if (Character.isLetter(i)) {
                   if (Character.isUpperCase(i)) {
                       decoded.append((char) ('A' + (i - 'A' + 26-offset) % 26 ));
                   } else {
                       decoded.append((char) ('a' + (i - 'a' + 26-offset) % 26 ));
                   }
               } else {
                   decoded.append(i);
               }
            }
            
            count++;
        }
        return decoded.toString();
    }
    
    public static void DecodeNoKey(String enc) {
        
        for(int x=0;x<26;x++){
           int offset = x % 26;
           StringBuilder decoded = new StringBuilder();
           
           int count =0;
           
           for (char i : enc.toCharArray()) {
               if(count%2 == 1){
                  if (Character.isLetter(i)) {
                      if (Character.isUpperCase(i)) {
                          decoded.append((char) ('A' + (i - 'A' + offset) % 26 ));
                      } else {
                          decoded.append((char) ('a' + (i - 'a' + offset) % 26 ));
                      }
                  } else {
                      decoded.append(i);
                  }
               }
               else if(count%2 == 0){
                  if (Character.isLetter(i)) {
                      if (Character.isUpperCase(i)) {
                          decoded.append((char) ('A' + (i - 'A' + 26-offset) % 26 ));
                      } else {
                          decoded.append((char) ('a' + (i - 'a' + 26-offset) % 26 ));
                      }
                  } else {
                      decoded.append(i);
                  }
               }
               
               count++;
           }
           System.out.println(decoded.toString());
       }
    }

}

No comments:

Post a Comment