como encriptar a senha passada pelo fomulário de login?

09/01/2017

12

Bom dia pessoal tenho dúvida quanto a criptografia, tenho pesquisado uma forma de criptografar senhas, mas não consigo fazer isso acontecer, até mesmo vendo forma simples, nenhuma bate com a forma do código a baixo, peço a compreensão de todos quanto a minha ignorância no assunto, peço ajuda de todos que quiserem me ajudar, obrigado.

parte do fomulario de login.php

<form method="POST" action="valida.php">
<table>
<tr>
<td>
<img src="assets/imgs/logo.png">
</td>
<td><h1>Sistema de Gestão<br><b>Patrimonial do DEP</b></h1></td>
</tr>
<tr>
<td colspan='2'>
<input type="text" name="txt_matricula" id="txt_matricula" class="form-control" placeholder="Matricula" required autofocus>
<br><br>
<input type="password" name="txt_senha" id="txt_senha" class="form-control" placeholder="Senha" required>
<br><br>
<input type='submit' value='logar'>
<?php if(isset($_SESSION['loginErro']))
{
echo $_SESSION['loginErro'];
unset ($_SESSION['loginErro']);
}
?>
</tr>
</table>



arquivo valida.php

//Verifica se os campos possuem dados
if((isset($_POST['txt_matricula']) == ['txt_matricula'] ) && (isset($_POST['txt_senha']) == ['txt_senha'])){
$matricula = mysqli_real_escape_string($conn, $_POST['txt_matricula']); //Escapar de caracteres especiais, como aspas, prevenindo SQL injection
$senha = mysqli_real_escape_string($conn, $_POST['txt_senha']);
$senha = md5($senha);
//

//$string = $senha;
//$codificada = hash('sha512', $string);

$result_matricula = "SELECT * FROM usuarios WHERE matricula = '$matricula' && senha = '$senha'";
$resultado_matricula = mysqli_query($conn, $result_matricula);
$resultado = mysqli_fetch_assoc($resultado_matricula);


parte do codigo de cadastro de uma usuario no campo senha

<td>
<label required>Senha:</label>
<input type="password" value='<?= $fdata ['$senha']?>' id="senha" name="senha" placeholder="Senha" >

</td>

a variavel $fdata recebe a senha digitada e cadastra dessa forma

$table = 'usuarios';
$form = [
'status' => 'Cadastrar',
'submit' => 'Salvar',
];
# campos do formulário
$fdata = [


'nome' => isset($_POST['nome']) ? $_POST['nome'] : null,
'senha' => isset($_POST['senha']) ? $_POST['senha'] : null,

];

em valida.php era para fazer a encriptação acredito eu mas nao consigo, como devo fazer?
Responder

Posts

13/01/2017

Jones

Bom dia
aqui ninguém me ajudou,

mas consegui resolver, nao sei se é do jeito certo

com a mudança do seguinte código

$nome = ($_POST['nome']); // acrescebtei as variaveis que pegavam os dados do campos do formulario
$niveis_acesso_id = ($_POST['niveis_acesso_id']);
$matricula = ($_POST['matricula']);
$senha = MD5($_POST['senha']);
// new record case

$query = "INSERT INTO usuarios set nome = '$nome', matricula = '$matricula', senha ='$senha' , niveis_acesso_id= '$niveis_acesso_id' ";
e mudei $query = "INSERT INTO . $middle_query senha = $senha"; para usuarios set nome = '$nome', matricula = '$matricula', senha ='$senha' , niveis_acesso_id= '$niveis_acesso_id'
desde já agradeço foi muita dor de cabeça mas agradeço, preciso fazer uma outra coisa, que não tinha conseguido, quero saber se posso postar poergunta aqui ou em criar outro topico, pois nem mesmo comecei a fazer pois achei que seria facil fazer a criptografia, mas perdi muito tempo.
Responder

13/01/2017

Wilson Neto

Você poderia usar a função nativa para MD5() no SQL, ficaria algo como MD5('senha') - (É só uma alternativa além do md5() do PHP).
E se você estiver usando o PHP >= 5.5 poderia usar o password_hash (nativo), o retorno dela é um hash de 72 caracteres. (Outra alternativa)

Veja: Password_has
Responder

13/01/2017

Jones

ficaria algo como

$senha password_hash ( senha $senha ) ?
Responder

13/01/2017

Wilson Neto

ficaria algo como

$senha password_hash ( senha $senha ) ?


Password_hash() espera uma string como parametro, o tipo de algoritmo e um parametro opcional.
Se você pedir para imprimir o retorno abaixo, você terá um hash.
password_hash('Senha aqui', PASSWORD_DEFAULT);


E para você verificar o hash basta usar a seguinte função:
Ela espera a string a comparar e o hash a ser comparado.
password_verify ('input do usuario' , 'hash para comparação')

Retorna um boolean.
Responder

17/01/2017

Jones

obrigado deu certo. :)
Responder

17/01/2017

Wilson Neto

obrigado deu certo. :)

Disponha! :D
Responder

17/01/2017

Jones

Eu posso fazer uma pergunta aqui relacionado a table e programação aqui nesse topico?, pois como vc me respondeu achque podera me ajudar a dúvida é a seguinte.

preciso fazer um registro de histórico de movimentação tipo: PI | Local anterior e local atual | Status anterior e atual | usuário que fez as alterações (logado) | data da movimentação


mas não tenho ideia de como deve ser o script, um exemplo, tenho uma tabela "A" toda alteração que for feita nessa tabela por meio de uma janela web, possa ser registrado em uma outra tabela "B" no banco porém isso é só para registro, no banco e não para ficar no site. não tenho ideia, de como fazer, nem que script usar.
Responder

17/01/2017

Wilson Neto

tenho uma tabela "A" toda alteração que for feita nessa tabela por meio de uma janela web, possa ser registrado em uma outra tabela "B"


Certo.
Então, eu usaria Triggers para resolver isso, acho mais prático. Mas claro que se quiser fazer a implementação em PHP, basta fazer uma nova query com os dados que você quer após a inserção, mas nesse caso eu usaria transactions só para garantir que tudo será inserido.

Segue alguns link para você se referenciar sobre triggers:
MySQL Triggers
Triggers

E uma referencia do PHP.net sobre Transactions: Tranctions
Responder

18/01/2017

Jones

Bom dia, fiz assim e segue o raciocinio que pretendo fazer.
tenho duas tabelas uma chama por exemplo cadastro com campos pi, localizacao, status e outros campos e outra tabela chamada de movimentacao tem campos pi| local-anterior|local-atual|status-Anterior-status-atual campos que a tabela cadastro nao tem, quero que ao eu fazer mudanca no campo pi, local e status (ATIVO/INATIVO) possa aparecer as mudanças feitas na tabela movimentação no campo PI, LOCAL-ANTERIOR e LOCAL-ATUAL, que possa passar o que estava antes e o que ficou, STATUS-ANTERIOR e STATUS-ATUAL da mesma forma.

Segue parte do codigo que faz atualização sem modificao ainda


$middle_query = $table . ' SET ' . implode(', ', $vars);

// new record case
$query = 'INSERT INTO ' . $middle_query;
$action = 'Inserção';
// update case:
if (isset($PARAMS[0])) {
$id = intval($PARAMS[0]);
$query = "UPDATE $middle_query WHERE nota_fiscal={$id}";
$action = 'Atualização';
}
// running query (update or insert)
$sqli->query($query);
if ($sqli->error) {
$msg[] = '<p class="error">Falha durante a ' . $action . '!<br> ' . $sqli->error . '</p>';
} else {
$msg[] = '<p class="ok">' . $action . ' realizada com sucesso!</p>';
header("Location:moderad.php");
}

}

// em caso de edição:
if (isset($PARAMS[0])) {
$id = intval($PARAMS[0]);
// busca os dados a serem editados
$result = $sqli->query("SELECT * FROM $table WHERE nota_fiscal=$id LIMIT 1");
// checa se houve erro:
if ($sqli->error) {
$msg[] = '<p class="error">Falha ao localizar registro!<br> ' . $sqli->error . '</p>';
} elseif ($result->num_rows) { // se algum registro foi encontrado:
$fdata = $result->fetch_assoc(); // carrega os dados
$form = [
'status' => 'Editar',
'submit' => 'Atualizar',
];
} else { // se nenhum registro for encontrado, define mensagem de erro:
$msg[] = '<p class="warning">Registro não encontrado na base de dados!</p>';
}
}

ai coloquei esse codigo mas nao sei se esta certo ou esta no lugar errado

//acrecimo codigos abaixo

$host="localhost";
$user="root";
$pass="";
$conexao = mysqli_connect($host, $user, $pass);

mysqli_autocommit($conexao, false);
mysqli_report(MYSQLI_REPORT_ERROR|MYSQLI_REPORT_STRICT);
$pi = 'pi';
$insert1 = false;
$insert2 = false;

try{
$stmt = mysqli_prepare($conexao, "INSERT INTO cadastro values (?)");
mysqli_stmt_bind_param($stmt, 's', $pi);
$insert1 = mysqli_stmt_execute($stmt);

$stmt = mysqli_prepare($conexao, "INSERT INTO movimentação (nome) values (?)");
mysqli_stmt_bind_param($stmt, 's', $pi);
$insert2 = mysqli_stmt_execute($stmt);
}catch (mysqli_sql_exception $e){
echo 'SQLState: '. $e->getCode() .' <br>Descrição: '. $e->getMessage();
}

if($insert1 && $insert2){
mysqli_commit($conexao);
echo 'sucesso';
}
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar