import java.util.*; import java.io.*; public class Cipher{ public String encode(String s, int n){ String u="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; String l="abcdefghijklmnopqrstuvwxyz"; for (int i=0;i<s.length();i++){ //Below will lowercase the string if (u.indexOf(s.substring(i,i+1))!=-1){ String a=""; int q=u.indexOf(s.substring(i,i+1)); a=s.substring(0,i)+l.substring(q,q+1)+s.substring(i+1); s=a;} //Below will encode the string String a=""; if (l.indexOf(s.substring(i,i+1))!=-1){ a=s.substring(0,i); int q=(l.indexOf(s.substring(i,i+1))+n)%26; a=a+l.substring(q,q+1)+s.substring(i+1); s=a;} } return s; } public String rotate(String filename, int n){ String u="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; String l="abcdefghijklmnopqrstuvwxyz"; String s=""; try{ Scanner sc=new Scanner (new File(filename)); while (sc.hasNext()){ String q =sc.nextLine(); q=q.toLowerCase(); s=s+q; } } catch (Exception e) {System.out.println(e);} for (int i=0;i<s.length();i++){ //Below will encode the string String a=""; if (l.indexOf(s.substring(i,i+1))!=-1){ a=s.substring(0,i); int q=(l.indexOf(s.substring(i,i+1))+n)%26; a=a+l.substring(q,q+1)+s.substring(i+1); s=a;} } return s; } private double[] CorpusFreqs=new double[26]; private void buildCorpusFreq(String filename){ int q=0; try{ Scanner sc=new Scanner (new File(filename)); while (sc.hasNext()){ String s =sc.nextLine(); s=s.toLowerCase(); for (int i=0;i<s.length();i++){ char c=s.charAt(i); if (c>='a' && c<='z'){ CorpusFreqs[c-'a']=CorpusFreqs[c-'a']+1; q=q+1;} } } } catch (Exception e) {System.out.println(e);} for (int i=0;i<CorpusFreqs.length;i++){ CorpusFreqs[i]=CorpusFreqs[i]/q;} System.out.println(Arrays.toString(CorpusFreqs)); } private void buildCorpusFreq2(String file){ int q=0; file=file.toLowerCase(); for (int i=0;i<file.length();i++){ char c=file.charAt(i); if (c>='a' && c<='z'){ CorpusFreqs[c-'a']=CorpusFreqs[c-'a']+1; q=q+1;} } for (int i=0;i<CorpusFreqs.length;i++){ CorpusFreqs[i]=CorpusFreqs[i]/q;} } private double[] buildCorpusFreq3(String filename){ int q=0; try{ Scanner sc=new Scanner (new File(filename)); while (sc.hasNext()){ String s =sc.nextLine(); s=s.toLowerCase(); for (int i=0;i<s.length();i++){ char c=s.charAt(i); if (c>='a' && c<='z'){ CorpusFreqs[c-'a']=CorpusFreqs[c-'a']+1; q=q+1;} } } } catch (Exception e) {System.out.println(e);} for (int i=0;i<CorpusFreqs.length;i++){ CorpusFreqs[i]=CorpusFreqs[i]/q;} return CorpusFreqs; } public int decode(String encodedfile, double[] decodedfile){ int offset=-1; double LowestDistance=Math.sqrt(26); System.out.println(LowestDistance); for (int i=0;i<26;i++){ buildCorpusFreq2(encode(encodedfile,i)); double ThisDistance=0.0; for (int w=0;w<26;w++){ ThisDistance=ThisDistance+Math.pow((CorpusFreqs[w]-decodedfile[w]),2); ThisDistance=Math.sqrt(ThisDistance); if (ThisDistance<LowestDistance){ LowestDistance=ThisDistance; offset=(26-i)%26;} } } return offset; } public static void main(String[] args){ Cipher c=new Cipher(); Cipher d=new Cipher(); System.out.println(c.encode("hello",3)); System.out.println(c.encode("abcxyz",3)); System.out.println(c.encode("hi there!",1)); System.out.println(c.encode("HI THERE!",1)); System.out.println(c.decode(c.rotate("test.txt",8),d.buildCorpusFreq3("test.txt"))); } }