diff --git a/senha.js b/senha.js new file mode 100644 index 0000000..fddf28f --- /dev/null +++ b/senha.js @@ -0,0 +1,150 @@ +// Importa os módulos necessários +const input = require('prompt-sync')({ sigint: true }); +const fs = require('fs'); +const crypto = require('crypto'); + +// Chave secreta para criptografia (substitua por uma chave mais segura em produção) +const chaveCriptografia = crypto.randomBytes(32); +const iv = crypto.randomBytes(16); // Vetor de inicialização (IV) para criptografia + +// Nome do arquivo que contém a senha +const arquivo = 'senha.txt'; + +// Função para limpar o terminal +function clear() { + process.stdout.write('\x1Bc'); +} + +// Função para criptografar o texto +function encrypt(text) { + const cipher = crypto.createCipheriv('aes-256-cbc', chaveCriptografia, iv); + let encrypted = cipher.update(text, 'utf8', 'hex'); + encrypted += cipher.final('hex'); + return encrypted; +} + +// Função para descriptografar o texto +function decrypt(encryptedText) { + const decipher = crypto.createDecipheriv('aes-256-cbc', chaveCriptografia, iv); + let decrypted = decipher.update(encryptedText, 'hex', 'utf8'); + decrypted += decipher.final('utf8'); + return decrypted; +} + +// Função para exibir o menu inicial e obter a ação do usuário +function inicio() { + clear(); + console.log("Bem vindo ao programa"); + console.log("Digite o que quer fazer:"); + console.log("1. Entrar"); + console.log("2. Apagar senha"); + console.log("3. Mudar senha\n"); + + let acao = parseInt(input("Digite: ")); + while (![1, 2, 3].includes(acao)) { + console.error(`Opção inválida: ${acao}`); + console.log("Tente novamente"); + acao = parseInt(input("Digite: ")); + } + + return acao; +} + +// Função para apagar a senha do arquivo +function apagarSenha() { + console.log("Deseja realmente apagar a senha? Esta ação é irreversível (s/n)"); + let escolha = input("Digite: "); + if (escolha.toLowerCase() === "s") { + console.log("Apagando..."); + fs.writeFile(arquivo, "", "utf-8", (err) => { + if (err) { + console.error(`Erro ao apagar a senha: ${err}`); + } else { + console.log("Senha apagada com sucesso."); + reiniciarPrograma(); + } + }); + } else { + console.log("Operação cancelada. Voltando ao menu principal."); + iniciarPrograma(); + } +} + +// Função para mudar a senha no arquivo +function mudarSenha(data) { + if (data === "") { + let novaSenha = input("Digite a nova senha: "); + fs.writeFileSync(arquivo, encrypt(novaSenha), "utf-8"); + console.log("Nova senha salva com sucesso."); + reiniciarPrograma(); + } else { + let senhaAntiga = input("Digite a senha antiga: "); + while (decrypt(data) !== senhaAntiga) { + console.error("Senha incorreta, tente novamente"); + senhaAntiga = input("Digite a senha antiga: "); + } + let novaSenha = input("Digite a nova senha: "); + fs.writeFileSync(arquivo, encrypt(novaSenha), "utf-8"); + console.log("Nova senha salva com sucesso."); + reiniciarPrograma(); + } +} + +// Função para autenticar o usuário no programa +function entrarPrograma(data) { + if (data === "") { + console.log("Bem vindo ao programa."); + } else { + let senha = input("Digite a senha: "); + while (decrypt(data) !== senha) { + console.error("Senha incorreta, tente novamente"); + senha = input("Digite a senha: "); + } + console.log("Bem vindo ao programa."); + } +} + +// Função principal que chama outras funções com base na ação do usuário +function programa(acao, data) { + switch (acao) { + case 1: + entrarPrograma(data); + break; + case 2: + apagarSenha(); + break; + case 3: + mudarSenha(data); + break; + default: + console.error(`Ação ${acao} não reconhecida.`); + break; + } +} + +// Função para iniciar o programa +function iniciarPrograma() { + fs.readFile(arquivo, 'utf-8', (err, data) => { + if (err) { + console.error(`Erro ao ler o arquivo ${arquivo}: ${err}`); + data = ""; + } + let acao = inicio(); + programa(acao, data); + }); +} + +// Função para reiniciar o programa +function reiniciarPrograma() { + console.log('Deseja reiniciar o programa? (s/n)'); + let rspst = input('Digite: '); + if (rspst.toLowerCase() === 's') { + iniciarPrograma(); + } else { + console.log('Programa encerrado.'); + process.exit(0); + } +} + +// Inicia o programa pela primeira vez +iniciarPrograma(); diff --git a/senha.txt b/senha.txt new file mode 100644 index 0000000..e69de29