//gcc 5.4.0
#include <stdio.h>
#include <stdlib.h>
char * cifra_de_cesar_encode(char * str, int deslocamento)
{
int i = 0;
while ((int)str[i] != 0)
{
str[i] = (char)((int)str[i] + (deslocamento%26));
i++;
}
return str;
}
char * cifra_de_cesar_decode(char * str, int deslocamento)
{
int i = 0;
while ((int)str[i] != 0)
{
str[i] = (int)str[i] - (deslocamento%26);
i++;
}
return str;
}
char * cifra_monoalfabetica_encode(char * str, char * alfabeto_encode, char * alfabeto_decode)
{
int i = 0;
while ((int)str[i] != 0)
{
int k = 0;
while (str[i] != alfabeto_encode[k])
k++;
str[i] = alfabeto_decode[k];
i++;
}
return str;
}
char * cifra_monoalfabetica_decode(char * str, char * alfabeto_encode, char * alfabeto_decode)
{
int i = 0;
while ((int)str[i] != 0)
{
int k = 0;
while (str[i] != alfabeto_decode[k])
k++;
str[i] = alfabeto_encode[k];
i++;
}
return str;
}
int main(void)
{
char palavra[] = "bemvindosafurbnaoesquecadefazeroexercicioapresentadopeloprofessoremsaladeaula";
printf("Cifra de César:\n\n"); const int CHAVE = 500;
cifra_de_cesar_encode(palavra, CHAVE);
cifra_de_cesar_decode(palavra, CHAVE);
printf("\n---------------\n"); printf("Cifra de Monoalfabética:\n\n"); const char alfabeto_encode[] = "qazwsxedcrfvtgbyhnujmikolp";
const char alfabeto_decode[] = "abcdefghijklmnopqrstuvwxyz";
cifra_monoalfabetica_encode(palavra, alfabeto_encode, alfabeto_decode);
cifra_monoalfabetica_decode(palavra, alfabeto_encode, alfabeto_decode);
return 0;
}
Ly9nY2MgNS40LjAKCiNpbmNsdWRlICA8c3RkaW8uaD4KI2luY2x1ZGUgIDxzdGRsaWIuaD4KCmNoYXIgKiBjaWZyYV9kZV9jZXNhcl9lbmNvZGUoY2hhciAqIHN0ciwgaW50IGRlc2xvY2FtZW50bykKewogICAgaW50IGkgPSAwOwogICAgCiAgICB3aGlsZSAoKGludClzdHJbaV0gIT0gMCkKICAgIHsKICAgICAgICBzdHJbaV0gPSAoY2hhcikoKGludClzdHJbaV0gKyAoZGVzbG9jYW1lbnRvJTI2KSk7CiAgICAgICAgaSsrOwogICAgfQogICAgcmV0dXJuIHN0cjsKfQoKY2hhciAqIGNpZnJhX2RlX2Nlc2FyX2RlY29kZShjaGFyICogc3RyLCBpbnQgZGVzbG9jYW1lbnRvKQp7CiAgICBpbnQgaSA9IDA7CiAgICAKICAgIHdoaWxlICgoaW50KXN0cltpXSAhPSAwKQogICAgewogICAgICAgIHN0cltpXSA9IChpbnQpc3RyW2ldIC0gKGRlc2xvY2FtZW50byUyNik7CiAgICAgICAgaSsrOwogICAgfQogICAgcmV0dXJuIHN0cjsKfQoKY2hhciAqIGNpZnJhX21vbm9hbGZhYmV0aWNhX2VuY29kZShjaGFyICogc3RyLCBjaGFyICogYWxmYWJldG9fZW5jb2RlLCBjaGFyICogYWxmYWJldG9fZGVjb2RlKQp7CiAgICBpbnQgaSA9IDA7CiAgICAKICAgIHdoaWxlICgoaW50KXN0cltpXSAhPSAwKQogICAgewogICAgICAgIGludCBrID0gMDsKICAgICAgICB3aGlsZSAoc3RyW2ldICE9IGFsZmFiZXRvX2VuY29kZVtrXSkKICAgICAgICAgICAgaysrOwogICAgICAgIHN0cltpXSA9IGFsZmFiZXRvX2RlY29kZVtrXTsKICAgICAgICBpKys7CiAgICB9CiAgICByZXR1cm4gc3RyOwp9CgpjaGFyICogY2lmcmFfbW9ub2FsZmFiZXRpY2FfZGVjb2RlKGNoYXIgKiBzdHIsIGNoYXIgKiBhbGZhYmV0b19lbmNvZGUsIGNoYXIgKiBhbGZhYmV0b19kZWNvZGUpCnsKICAgIGludCBpID0gMDsKICAgIAogICAgd2hpbGUgKChpbnQpc3RyW2ldICE9IDApCiAgICB7CiAgICAgICAgaW50IGsgPSAwOwogICAgICAgIHdoaWxlIChzdHJbaV0gIT0gYWxmYWJldG9fZGVjb2RlW2tdKQogICAgICAgICAgICBrKys7CiAgICAgICAgc3RyW2ldID0gYWxmYWJldG9fZW5jb2RlW2tdOwogICAgICAgIGkrKzsKICAgIH0KICAgIHJldHVybiBzdHI7Cn0KCmludCBtYWluKHZvaWQpCnsKICAgIGNoYXIgcGFsYXZyYVtdID0gImJlbXZpbmRvc2FmdXJibmFvZXNxdWVjYWRlZmF6ZXJvZXhlcmNpY2lvYXByZXNlbnRhZG9wZWxvcHJvZmVzc29yZW1zYWxhZGVhdWxhIjsgICAgCiAgICBwcmludGYoIkNpZnJhIGRlIEPDqXNhcjpcblxuIik7CiAgICBwcmludGYoIiVzIiwgcGFsYXZyYSk7CiAgICBjb25zdCBpbnQgQ0hBVkUgPSA1MDA7CiAgICBjaWZyYV9kZV9jZXNhcl9lbmNvZGUocGFsYXZyYSwgQ0hBVkUpOwogICAgcHJpbnRmKCJcbiVzIiwgcGFsYXZyYSk7CiAgICBjaWZyYV9kZV9jZXNhcl9kZWNvZGUocGFsYXZyYSwgQ0hBVkUpOwogICAgcHJpbnRmKCJcbiVzIiwgcGFsYXZyYSk7CiAgICBwcmludGYoIlxuLS0tLS0tLS0tLS0tLS0tXG4iKTsKICAgIHByaW50ZigiQ2lmcmEgZGUgTW9ub2FsZmFiw6l0aWNhOlxuXG4iKTsKICAgIGNvbnN0IGNoYXIgYWxmYWJldG9fZW5jb2RlW10gPSAicWF6d3N4ZWRjcmZ2dGdieWhudWptaWtvbHAiOwogICAgY29uc3QgY2hhciBhbGZhYmV0b19kZWNvZGVbXSA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7CiAgICBjaWZyYV9tb25vYWxmYWJldGljYV9lbmNvZGUocGFsYXZyYSwgYWxmYWJldG9fZW5jb2RlLCBhbGZhYmV0b19kZWNvZGUpOwogICAgcHJpbnRmKCIlcyIsIHBhbGF2cmEpOwogICAgY2lmcmFfbW9ub2FsZmFiZXRpY2FfZGVjb2RlKHBhbGF2cmEsIGFsZmFiZXRvX2VuY29kZSwgYWxmYWJldG9fZGVjb2RlKTsKICAgIHByaW50ZigiXG4lcyIsIHBhbGF2cmEpOwogICAgcmV0dXJuIDA7Cn0K