Source: Google Images, Wikipedia
Hey folks! for those who are searching for vigenere cipher in java implementation here is a short code.
public static String vigenere(String str, String key)
{
String pattern = "abcdefghijklmnopqrstuvwxyz";
//lowercase
str = str.toLowerCase();
key = key.toLowerCase();
char char_key,char_str;
int key_index=0;
int str_index=0;
int j=0;
String cyphertext="";
for(int i=0;i<=str.length()-1;i++)
{
//character position of key
char_key = key.charAt(i);
key_index = pattern.indexOf(char_key);
//character position of str
char_str = str.charAt(i);
str_index = pattern.indexOf(char_str);
if(Character.isLetter(char_str))
{
j = (Math.abs(key_index+str_index))%26;
cyphertext+=pattern.charAt(j);
}
else
{
cyphertext = cyphertext+char_str;
}
}
return "Cypher text: " + cyphertext;
}
Basic usage
System.out.println(vigenere(str,key));
Vigenere cipher works like caesars cipher but unlike ceasar, this cipher rotate each letter by an alphabetical input not by number
e.g ceasar cipher works like this
caesar text = a
ceasar rotate number = 2
ceasar output = c
the output becomes c, because letter a has been incremented by 2 (a+2 = ..b..c)
On vigenere cipher, it works like this
vigenere text = f
vigenere key = b
vigenere output = g
the output becomes g because the vigenere key is letter b. and on my code, b is positioned as number 1 (a=0 or zero)
therefore (f+1 = ..g)
btw, vigenere cipher has been named after Blaise de Vigenère, but actually wikipedia said that Giovan Battista Bellaso is the one who invented it. poor guy.
okay that''s it. :)