iurygdeoliveira / Web-development-classes

Repository aimed at building collaborative knowledge about web development, especially with the computer science students at Campus Araguaína - IFTO. However, anyone can contribute if they wish to do so.
4 stars 41 forks source link

Desafio 48: Treinando Lógica de Programação com Javascript #55

Closed iurygdeoliveira closed 1 year ago

iurygdeoliveira commented 1 year ago

Contact Details

iury.oliveira@ifto.edu.br

Challenge Description

Vamos falar sobre um programa de criptografia simples! Esse programa pode ajudar a enviar mensagens secretas para outra pessoa sem que outras pessoas possam lê-las.

O programa funciona de uma maneira bem fácil, com três passos:

  1. Primeiro, todas as letras minúsculas e maiúsculas são deslocadas três posições para a direita, seguindo a tabela ASCII. Por exemplo, a letra 'a' vira 'd', a letra 'y' vira '|', e assim por diante.
  2. Depois, a linha é invertida.
  3. Por fim, os caracteres a partir da metade são deslocados uma posição para a esquerda na tabela ASCII. Por exemplo, 'b' vira 'a' e 'a' vira '`'.

Vamos dar um exemplo: se a entrada for "Texto #3", o programa deve fazer o seguinte:

  1. Deslocar as letras: "Wh{wr #3"
  2. Inverter: "3# rw{hW"
  3. Deslocar os caracteres da metade em diante:"3# rvzgV"

Agora é a sua vez! Tente criar um programa em JavaScript que faça isso. Você pode testá-lo usando diferentes mensagens para criptografar e ver se o resultado está correto!

Additional tips

Utilize os inputs do html para inserir dados de entrada. Utilize CSS, se quiser acrescentar alguma estilo ao programa.

Código com ideia de resolução similar

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

    <h3>Exercicio de criptografia</h3>
    <input type="text" id="entrada" style="width: 400px;">
    <br>
    <button id="submit" style="margin-top: 5px; margin-bottom: 5px;">Converter essa parada !</button>
    <br>
    <textarea id="resultado" cols="30" rows="10">

    </textarea>

<script src="script.js"> </script>

</body>
</html>
let submit = document.getElementById('submit');
submit.addEventListener("click", convertToBits);

function convertDecToBin(entrada){

    let mensagem = [];
    for (let index = 0; index < entrada.length; index++) {
        const element = entrada.charCodeAt(index);
        mensagem.push(element.toString(2));
    }
    return mensagem;
}

// 1º Cada caractere na mensagem deve ser convertido
// para sua representação binária de 8 bits.
function convertToBits() {

    let entrada = document.getElementById('entrada').value;
    let mensagem = convertDecToBin(entrada);
    //console.log(mensagem)

    invertFirstBit(mensagem);
}

// 2º O primeiro bit de cada caractere deve ser invertido.
function invertFirstBit(mensagem){

    let newMsg = [];
    mensagem.forEach(element => {

        let newElement = element[0] === '0'
         ? '1' + element.slice(1) 
         : '0' + element.slice(1);

        newMsg.push(newElement);
    });

    //console.log(newMsg);
    invertPairs(newMsg)
}

// 3º Os bits de cada caractere devem ser invertidos
// em grupos de 2 bits, começando pelo segundo bit.
// Por exemplo, se o segundo bit for invertido, 
// o quarto bit também deve ser invertido, 
// deixando o primeiro e o terceiro bits intactos.

function invertPairs(msgFirstBit){

    let msgPairs = [];
    for (let index = 0; index < msgFirstBit.length; index++) {

        let newStr = '';
        newStr +=  msgFirstBit[index].charAt(0);

        for (let i = 1; i < msgFirstBit[index].length; i++) {

            if (!(i % 2 === 0)) { // verifica se o índice é par
                let bit = msgFirstBit[index].charAt(i); // obtém o bit atual
                let newBit = bit === '1' ? '0' : '1'; // inverte o bit
                newStr += newBit; // adiciona o novo bit à nova string
              } else {
                newStr += msgFirstBit[index].charAt(i); // adiciona o bit original à nova string
              }

          }
          msgPairs.push(newStr);
    }
    console.log(msgPairs);
    convertBinToDec(msgPairs)
}

// 4º Os bits invertidos devem ser convertidos de
// volta para caracteres ASCII.

function convertBinToDec(msgPairs){

    let ascii = [];

    for (let index = 0; index < msgPairs.length; index++) {

        var decimal = parseInt(msgPairs[index], 2); // converte de binário para decimal
        console.log(decimal);
        var caracter = String.fromCharCode(decimal); // obtém o caractere correspondente
        console.log(caracter)
        ascii.push(caracter);
    }

    console.log(ascii);
    viewResult(ascii)
}

function viewResult(ascii){

    let newStr = '';

    ascii.forEach(element => {
        newStr +=  element;
    });

    var resultado = document.getElementById("resultado");
    resultado.innerHTML = newStr;

}
kiaraalcantara commented 1 year ago

The Makers

Site: https://kiaraalcantara.github.io/criptografia/

Repositório: https://github.com/kiaraalcantara/criptografia.git

GiorgeLucas commented 1 year ago

Vikings

Alunos: Giorge Lucas, João Edson, Filipe Carvalho

Site: https://nonulldev.github.io/Criptografia/

Repositório: https://github.com/NoNullDev/Criptografia

AnaRaquel28 commented 1 year ago

Equipe: ALFA

Integrantes: Ana Raquel; Byanca Mamedes e Pedro Henrique.

Site: https://anaraquel28.github.io/Desafio48/ Repositório: https://github.com/AnaRaquel28/Desafio48

ItaloNishikawa commented 1 year ago

Equipe: PDF

Alunos: Italo Nishikawa, Edson Jr e Gustavo Frederico

Site: https://italonishikawa.github.io/encryptor/ Repositório: https://github.com/ItaloNishikawa/encryptor

kauanynha05 commented 1 year ago

Equipe: As três mosqueteiras Alunas: Anna Julia Coelho; Sarah Ferreira e Kauany Coelho

Link do site: https://kauanynha05.github.io/desafio48/

Link do repositorio: https://github.com/kauanynha05/desafio48

rafaelnamel0 commented 1 year ago

Equipe ThreeCoders

SITE: https://rafaelnamel0.github.io/dsf48/ REPOSITÓRIO: https://github.com/rafaelnamel0/dsf48

Izabelaqueirox commented 1 year ago

Equipe: ELEKTRAS

SITE: https://izabelaqueirox.github.io/desafio48/ REPOSITÓRIO: https://github.com/Izabelaqueirox/desafio48

brunnaborgex commented 1 year ago

Equipe: AUTARQUIA SITE: https://brunnaborgex.github.io/Equipe-Autarquia-/ REPOSITÓTIO: https://github.com/brunnaborgex/Equipe-Autarquia-

Alanna-Gamaa commented 1 year ago

DUO ORCACA

ALUNOS : GUILHERME , ALANNA SITE:https://alanna-gamaa.github.io/criptografia.github.io/ REPOSITORIO:https://github.com/Alanna-Gamaa/criptografia.github.io

WandesonG0101 commented 1 year ago

Alunos: Alisson, Eduardo, wanderson site: https://wandesong0101.github.io/trabalho_web/ repositorio: https://wandesong0101.github.io/trabalho_web/

WandesonG0101 commented 1 year ago

Alunos: Alisson, Eduardo, wanderson site: https://wandesong0101.github.io/trabalho_web/ repositorio: https://github.com/WandesonG0101/trabalho_web

suzanasantoss commented 1 year ago

Equipe Lovelace

Suzana Santos e @Analicemc Link para o site: https://desafio48.suzanasantoss.repl.co/ Link para o repositório: https://github.com/suzanasantoss/desafio48

apauloenzo commented 1 year ago

Link para o site: https://apauloenzo.github.io/criptografia.github.io/ Link para o repositório: https://github.com/apauloenzo/criptografia.github.io.git

anbia1805carvalho commented 1 year ago

Equipe ABY Site: https://anbia1805carvalho.github.io/ABY/ Repositório: https://github.com/anbia1805carvalho/ABY

simonebreeman commented 1 year ago

Equipe RESISTECH Alunas: Lorenna Guedes e Simone Breeman Site: https://simonebreeman.github.io/Desafio_48/ Respositório: https://github.com/simonebreeman/Desafio_48.git

Professor, para ultrapassar a fase de segurança (autenticação), use como login seu primeiro nome (apenas letra minúsculas) e como senha use seu login seguido do numeral 123.

EduardoSilva09 commented 1 year ago

Equipe: NetForce

Nomes: Eduardo, José, Kézio
Endereço: https://github.com/EduardoSilva09/DesafioCriptografia
RenataGomes123 commented 1 year ago

Equipe coding goddesses

REPOSITÓRIO: https://github.com/RenataGomes123/Desafio-48

SITE: https://renatagomes123.github.io/Desafio-48/