151 lines
4.7 KiB
JavaScript
151 lines
4.7 KiB
JavaScript
// 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();
|