using static System.Console;
public class Program {
public static void Main() {
int escolha = 1;
while (escolha != 0) {
WriteLine("ESCOLHA UMA OPÇÃO");
WriteLine("-----------------");
WriteLine("1-Encriptar");
WriteLine("2-Decriptar");
WriteLine("0-Encerrar");
WriteLine("-----------------");
if (!int.TryParse(ReadLine(), out escolha) || escolha < 0 || escolha > 2) {
WriteLine("Opção inválida");
continue;
}
if (escolha != 0) {
WriteLine("Digite a mensagem: ");
var mensagem = ReadLine();
WriteLine("Digite a chave: ");
var chave = ReadLine();
WriteLine(mensagem.ToUpper());
WriteLine(chave.ToUpper());
WriteLine(CifraVigenere(mensagem, chave, escolha == 1));
}
}
}
private static string CifraVigenere(string mensagem, string chave, bool flag) { //normalmente não deveria escolher um método por um bool
if (flag) {
var codigo = "";
for (int i = 0, j = 0; i < mensagem.Length; i++, j++) {
char c = char.ToUpper(mensagem[i]);
if (c < 'A' || c > 'Z') continue;
codigo += (char)((c + char.ToUpper(chave[j % chave.Length]) - 2 * 'A') % 26 + 'A');
}
return codigo;
}
return ""; //até criar o decript
}
}
//https://pt.stackoverflow.com/q/185158/101
dXNpbmcgc3RhdGljIFN5c3RlbS5Db25zb2xlOwoJCQkJCQpwdWJsaWMgY2xhc3MgUHJvZ3JhbSB7CglwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpIHsKICAgICAgICBpbnQgZXNjb2xoYSA9IDE7CgkJd2hpbGUgKGVzY29saGEgIT0gMCkgewoJCQlXcml0ZUxpbmUoIkVTQ09MSEEgVU1BIE9Qw4fDg08iKTsKCQkJV3JpdGVMaW5lKCItLS0tLS0tLS0tLS0tLS0tLSIpOwoJCQlXcml0ZUxpbmUoIjEtRW5jcmlwdGFyIik7CgkJCVdyaXRlTGluZSgiMi1EZWNyaXB0YXIiKTsKCQkJV3JpdGVMaW5lKCIwLUVuY2VycmFyIik7CgkJCVdyaXRlTGluZSgiLS0tLS0tLS0tLS0tLS0tLS0iKTsKCQkJaWYgKCFpbnQuVHJ5UGFyc2UoUmVhZExpbmUoKSwgb3V0IGVzY29saGEpIHx8IGVzY29saGEgPCAwIHx8IGVzY29saGEgPiAyKSB7CgkJCQlXcml0ZUxpbmUoIk9ww6fDo28gaW52w6FsaWRhIik7CgkJCQljb250aW51ZTsKCQkJfQoJCQlpZiAoZXNjb2xoYSAhPSAwKSB7CgkJCQlXcml0ZUxpbmUoIkRpZ2l0ZSBhIG1lbnNhZ2VtOiAiKTsKCQkJCXZhciBtZW5zYWdlbSA9IFJlYWRMaW5lKCk7CgkJCQlXcml0ZUxpbmUoIkRpZ2l0ZSBhIGNoYXZlOiAiKTsKCQkJCXZhciBjaGF2ZSA9IFJlYWRMaW5lKCk7CgkJCQlXcml0ZUxpbmUobWVuc2FnZW0uVG9VcHBlcigpKTsKCQkJCVdyaXRlTGluZShjaGF2ZS5Ub1VwcGVyKCkpOwoJCQkJV3JpdGVMaW5lKENpZnJhVmlnZW5lcmUobWVuc2FnZW0sIGNoYXZlLCBlc2NvbGhhID09IDEpKTsKCQkJfQoJCX0KCX0KCXByaXZhdGUgc3RhdGljIHN0cmluZyBDaWZyYVZpZ2VuZXJlKHN0cmluZyBtZW5zYWdlbSwgc3RyaW5nIGNoYXZlLCBib29sIGZsYWcpIHsgLy9ub3JtYWxtZW50ZSBuw6NvIGRldmVyaWEgZXNjb2xoZXIgdW0gbcOpdG9kbyBwb3IgdW0gYm9vbAogICAgICAgIGlmIChmbGFnKSB7CgkJCXZhciBjb2RpZ28gPSAiIjsKICAgICAgICAgICAgZm9yIChpbnQgaSA9IDAsIGogPSAwOyBpIDwgbWVuc2FnZW0uTGVuZ3RoOyBpKyssIGorKykgewoJCQkJY2hhciBjID0gY2hhci5Ub1VwcGVyKG1lbnNhZ2VtW2ldKTsKCQkJCWlmIChjIDwgJ0EnIHx8IGMgPiAnWicpIGNvbnRpbnVlOwoJCQkJY29kaWdvICs9IChjaGFyKSgoYyArIGNoYXIuVG9VcHBlcihjaGF2ZVtqICUgY2hhdmUuTGVuZ3RoXSkgLSAyICogJ0EnKSAlIDI2ICsgJ0EnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gY29kaWdvOwoJCX0KCQlyZXR1cm4gIiI7IC8vYXTDqSBjcmlhciBvIGRlY3JpcHQKICAgIH0KfQoKLy9odHRwczovL3B0LnN0YWNrb3ZlcmZsb3cuY29tL3EvMTg1MTU4LzEwMQ==