package com.sanfoundry.setandstring;
import java.util.*;
import java.lang.*;
import java.io.*;
public class VigenereCipher
{
{
text = text.toUpperCase();
for (int i = 0, j = 0; i < text.length(); i++)
{
char c = text.charAt(i);
if (c < 'A' || c > 'Z')
continue;
res += (char) ((c + key.charAt(j) - 2 * 'A') % 26 + 'A');
j = ++j % key.length();
}
return res;
}
{
text = text.toUpperCase();
for (int i = 0, j = 0; i < text.length(); i++)
{
char c = text.charAt(i);
if (c < 'A' || c > 'Z')
continue;
res += (char) ((c - key.charAt(j) + 26) % 26 + 'A');
j = ++j % key.length();
}
return res;
}
public static void main
(String[] args
) {
String key
= "VIGENERECIPHER"; String message
= "Beware the Jabberwock, my son! The jaws that bite, the claws that catch!"; String encryptedMsg
= encrypt
(message, key
); System.
out.
println("String: " + message
); System.
out.
println("Encrypted message: " + encryptedMsg
); System.
out.
println("Decrypted message: " + decrypt
(encryptedMsg, key
)); }
}
cGFja2FnZSBjb20uc2FuZm91bmRyeS5zZXRhbmRzdHJpbmc7CiAKIAppbXBvcnQgamF2YS51dGlsLio7CmltcG9ydCBqYXZhLmxhbmcuKjsKaW1wb3J0IGphdmEuaW8uKjsKIAogCnB1YmxpYyBjbGFzcyBWaWdlbmVyZUNpcGhlcgp7CiAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBlbmNyeXB0KFN0cmluZyB0ZXh0LCBmaW5hbCBTdHJpbmcga2V5KQogICAgewogICAgICAgIFN0cmluZyByZXMgPSAiIjsKICAgICAgICB0ZXh0ID0gdGV4dC50b1VwcGVyQ2FzZSgpOwogICAgICAgIGZvciAoaW50IGkgPSAwLCBqID0gMDsgaSA8IHRleHQubGVuZ3RoKCk7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGNoYXIgYyA9IHRleHQuY2hhckF0KGkpOwogICAgICAgICAgICBpZiAoYyA8ICdBJyB8fCBjID4gJ1onKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIHJlcyArPSAoY2hhcikgKChjICsga2V5LmNoYXJBdChqKSAtIDIgKiAnQScpICUgMjYgKyAnQScpOwogICAgICAgICAgICBqID0gKytqICUga2V5Lmxlbmd0aCgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzOwogICAgfQogCiAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBkZWNyeXB0KFN0cmluZyB0ZXh0LCBmaW5hbCBTdHJpbmcga2V5KQogICAgewogICAgICAgIFN0cmluZyByZXMgPSAiIjsKICAgICAgICB0ZXh0ID0gdGV4dC50b1VwcGVyQ2FzZSgpOwogICAgICAgIGZvciAoaW50IGkgPSAwLCBqID0gMDsgaSA8IHRleHQubGVuZ3RoKCk7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGNoYXIgYyA9IHRleHQuY2hhckF0KGkpOwogICAgICAgICAgICBpZiAoYyA8ICdBJyB8fCBjID4gJ1onKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIHJlcyArPSAoY2hhcikgKChjIC0ga2V5LmNoYXJBdChqKSArIDI2KSAlIDI2ICsgJ0EnKTsKICAgICAgICAgICAgaiA9ICsraiAlIGtleS5sZW5ndGgoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlczsKICAgIH0KIAogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgIHsKICAgICAgICBTdHJpbmcga2V5ID0gIlZJR0VORVJFQ0lQSEVSIjsKICAgICAgICBTdHJpbmcgbWVzc2FnZSA9ICJCZXdhcmUgdGhlIEphYmJlcndvY2ssIG15IHNvbiEgVGhlIGphd3MgdGhhdCBiaXRlLCB0aGUgY2xhd3MgdGhhdCBjYXRjaCEiOwogICAgICAgIFN0cmluZyBlbmNyeXB0ZWRNc2cgPSBlbmNyeXB0KG1lc3NhZ2UsIGtleSk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdHJpbmc6ICIgKyBtZXNzYWdlKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVuY3J5cHRlZCBtZXNzYWdlOiAiICsgZW5jcnlwdGVkTXNnKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRlY3J5cHRlZCBtZXNzYWdlOiAiICsgZGVjcnlwdChlbmNyeXB0ZWRNc2csIGtleSkpOwogICAgfQp9