Add files via upload
This commit is contained in:
150
senha.js
Normal file
150
senha.js
Normal file
@@ -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();
|
||||
Reference in New Issue
Block a user