Vigenere

 Vigenere cipher

import java.util.*;


public class Vigenere {

    static String vig(String t, String k, boolean e) {

        String r=""; k=k.repeat(t.length()/k.length()+1).substring(0,t.length());

        for(int i=0;i<t.length();i++){

            int a=t.charAt(i)-'a', b=k.charAt(i)-'a';

            r+=(char)((e?(a+b):(a-b+26))%26+'a');

        }

        return r;

    }


    public static void main(String[] a){

        Scanner s=new Scanner(System.in);

        System.out.print("Text: "); String p=s.next();

        System.out.print("Key: "); String k=s.next();

        String c=vig(p,k,true);

        System.out.println("Cipher: "+c);

        System.out.println("Decrypted: "+vig(c,k,false));

    }

}




Playfair


import java.util.*;


public class PlayfairMini {

    static char[][] B=new char[5][5];


    public static void main(String[] x){

        Scanner sc=new Scanner(System.in);

        System.out.print("Key: "); String k=sc.nextLine().toUpperCase().replace("J","I");

        System.out.print("Text: "); String t=sc.nextLine().toUpperCase().replace("J","I");


        make(k);

        String p=prep(t);

        String c=run(p,1);

        String d=run(c,-1);


        System.out.println("Cipher: "+c);

        System.out.println("Decrypted: "+d);

    }


    static void make(String k){

        boolean u[]=new boolean[26];

        // remove everything except A-Z to avoid indexing errors

        String safe = k.replaceAll("[^A-Z]","") + "ABCDEFGHIKLMNOPQRSTUVWXYZ";

        int r=0,c=0;

        for(char ch: safe.toCharArray())

            if(!u[ch-'A']){

                B[r][c++]=ch; u[ch-'A']=true;

                if(c==5){c=0;r++;} if(r==5)break;

            }

    }


    static String prep(String t){

        StringBuilder o=new StringBuilder();

        t=t.replaceAll("[^A-Z]","");

        for(int i=0;i<t.length();){

            char a=t.charAt(i), b=i+1<t.length()?t.charAt(i+1):'X';

            if(a==b){b='X';i++;} else i+=2;

            o.append(a).append(b);

        }

        return o.toString();

    }


    static String run(String t,int s){

        StringBuilder o=new StringBuilder();

        for(int i=0;i<t.length();i+=2){

            int[] A=pos(t.charAt(i)),B2=pos(t.charAt(i+1));

            if(A[0]==B2[0]){

                o.append(B[A[0]][(A[1]+s+5)%5]);

                o.append(B[B2[0]][(B2[1]+s+5)%5]);

            } else if(A[1]==B2[1]){

                o.append(B[(A[0]+s+5)%5][A[1]]);

                o.append(B[(B2[0]+s+5)%5][B2[1]]);

            } else {

                o.append(B[A[0]][B2[1]]);

                o.append(B[B2[0]][A[1]]);

            }

        }

        return o.toString();

    }


    static int[] pos(char ch){

        for(int i=0;i<5;i++)

            for(int j=0;j<5;j++)

                if(B[i][j]==ch) return new int[]{i,j};

        return null;

    }

}


Comments

Popular posts from this blog

1

Rsa