Advertisement
Guest User

Steganography for Unicode

a guest
Nov 11th, 2013
266
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.16 KB | None | 0 0
  1. package com.ignateff.stegotext;
  2.  
  3. public class Encoder {
  4.     private static char ZERO_SPACE = (char)65279;
  5.    
  6.     private String message;
  7.     private int cipherSize;
  8.    
  9.     public Encoder(String plainText){
  10.         message=plainText;
  11.         cipherSize = 1+plainText.length();
  12.     }
  13.    
  14.     public static boolean getBit(int input, int bit){
  15.         if((input & (1 << bit)) != 0)return true;
  16.         return false;
  17.     }
  18.    
  19.     public static String getSecret(String message){
  20.         char[] c = message.toCharArray();
  21.         String cipher = "";
  22.         int tmpChar = 0;
  23.         int m = 0;
  24.         for(int i=0; i<c.length; i++){
  25.             if(c[i]!=ZERO_SPACE){
  26.                 tmpChar <<= 1;
  27.                 m++;
  28.             }else{
  29.                 tmpChar |= 1;
  30.             }
  31.             if(m==5){
  32.                 if(tmpChar==0){return cipher;}
  33.                 tmpChar>>=1;
  34.                 cipher+=translateInt(tmpChar);
  35.                 tmpChar=0; m=0;
  36.             }
  37.         }
  38.         return cipher;
  39.     }
  40.    
  41.     public static int q(boolean b){
  42.         if(b)return 1;
  43.         return 0;
  44.     }
  45.    
  46.     public String encodeSecret(String secret){
  47.         int sLen = 5*secret.length();
  48.         if(sLen > cipherSize){return "INVALID_CIPHER_SIZE";}
  49.         boolean[] a = new boolean[sLen];
  50.        
  51.         char[] c = secret.toCharArray();
  52.         char[] m = message.toCharArray();
  53.        
  54.         for(int i=0; i<c.length; i++){
  55.             int x = translateChar(c[i]);
  56.             if(x==-1)return "NOT_SUPPORTED_CHARACTER: " +c[i];
  57.             a[i*5+0] = getBit(x, 4);
  58.             a[i*5+1] = getBit(x, 3);
  59.             a[i*5+2] = getBit(x, 2);
  60.             a[i*5+3] = getBit(x, 1);
  61.             a[i*5+4] = getBit(x, 0);
  62.             }
  63.         String r = "";
  64.         if(a[0])r+=ZERO_SPACE;
  65.         for(int i=0; i<m.length; i++){
  66.             r+=m[i];
  67.             if(i+1<a.length && a[i+1])r+=ZERO_SPACE;
  68.         }
  69.         return r;
  70.     }
  71.    
  72.     public static char translateInt(int i){
  73.         if(i > 0 && i<=26)return (char)(i+64);
  74.         switch(i){
  75.             case 27:
  76.                 return ' ';
  77.             case 28:
  78.                 return '.';
  79.             case 29:
  80.                 return ',';
  81.             case 30:
  82.                 return '!';
  83.             case 31:
  84.                 return '?';
  85.         }
  86.         return '#';
  87.     }
  88.    
  89.     public static int translateChar(char c){
  90.         if((int)c >= 65 && (int)c <=90){
  91.             return (int)c-64;
  92.         }
  93.         if((int)c >= 97 && (int)c <=122){
  94.             return (int)c-96;
  95.         }
  96.         switch(c){
  97.             case ' ':
  98.                 return 27;
  99.             case '.':
  100.                 return 28;
  101.             case ',':
  102.                 return 29;
  103.             case '!':
  104.                 return 30;
  105.             case '?':
  106.                 return 31;
  107.         }
  108.         return -1;
  109.     }
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement