Ir para conteúdo
Fórum Script Brasil
  • 0

Estudando a criptografia no PHP


Frank K Hosaka

Pergunta

Pretendo criar um código para login e autenticação nessa mensagem, espero terminar o serviço em 28/02/2023.

A primeira parte do código é esse:

<?php
for($i=1;$i<=5;$i++){
    echo password_hash($password="1234",$algo=PASSWORD_BCRYPT,
        $options=['cost'=>12])."<br>";}

E o resutado foi esse:

$2y$12$oGdLEGF5UD8EERLYnRwib.1wIh6F2r5NsaeZ4eRXWSv80HxUBk/bW
$2y$12$AFZgBxf1d8Er6A4otuQcAeFXUgmTYqDfKj7asXxhXOJ5A0n.xl65e
$2y$12$hdTZz8GM6Mn.4S5Uqz7AKuMkbq7QHyOewwHn4w9qhvhD3NN2NXRYa
$2y$12$XNuacQ9GNnZI0aC7BEMi0.EAIwe3UKCSqt9wZrROSvGmWgIywGyOe
$2y$12$tmlC.q4lVDzHgXOzSAIbJe779UOSa6LQuwhGDhjJtAsXdP03v854O

Mas, se você for rodar na sua máquina, certamente vai ter 5 hash diferentes. Nesse ambiente, como é possível autenticar? Eu não sei, assim vou usar o método da tentativa & erro, até conseguir "entrar no sistema". Desejem sorte para mim.

Tentei definir o campo email como único, mas o MySQL não pemitiu, o máximo permitido para ser campo único é 767 bytes. Então, eu pedi para o PHP não cadastrar ninguém que já tivesse um email já cadastrado. Encontrei um tutorial de autenticação na página Authenticating a user using PDO and password_verify() - Treating PHP Delusions, mas ele também não funcionou. Acredito que o problema é o algorítimo PASSWORD_BCRYPT. Se eu não conseguir nada com ele, vou apelar para o md5. Apesar do meu código não ter funcionado, eu gostei dele, ao invés de ter uma tela de cadastro e outra de autenticação, eu fiz uma tela só para os dois! Veja só:
 

astudy.php

<?php
$pdo=new PDO("mysql:host=localhost;dbname=astudy","root","");
$username="frank";
$email="frankhosaka@gmail.com";
$pass=password_hash($password="1234",$algo=PASSWORD_BCRYPT,
        $options=['cost'=>12])."<br>";
$stmt=$pdo->prepare("select * from users where email=?");
$stmt->execute([$email]);
$user=$stmt->fetch();
if(!$user){
    $stmt=$pdo->prepare("insert into users (username,email,password)values (?,?,?)");
    $stmt->execute([$username,$email,$pass]);header('location:astudy.php');}
if ($user && password_verify($pass, $user['password'])){
        echo "valid!";} else {echo "invalid"; }

Depois de estudar o PASSWORD_BCRYPT, eu vi que ele funciona, o que não funciona é o código acima. A variável $pass foi criptografada fora da lógica, quem tem que ser criptografado é a senha que vai ser armazenado no banco de dados. Outra coisa legal é que o PASSWORD_BCRYPT não é coisa do objeto PDO mas do PHP, assim pude montar o código com o mysqli:

astudy.php

<body style="width:500;margin:0 auto"><div style=height:10%></div>
<form method=post>
<p><input type=email name=email placeholder=email required>
<p><input name=senha placeholder=senha required>
<p><input type=submit>
</form>
<?php
if(!isset($_POST['email'])){exit;}
$mysqli=new mysqli("localhost","root","","astudy");
$email=$_POST['email'];
$senha=$_POST['senha'];
$query=$mysqli->query("select * from users where email='$email'");
$user=$query->fetch_assoc();
if(!$user){
  $pass=password_hash($password=$senha,$algo=PASSWORD_BCRYPT,
          $options=['cost'=>12]);
  $mysqli->query("insert into users (email,password)values ('$email','$pass')");
  header("location:astudy.php");} 
if ($user && password_verify($senha, $user['password'])){
        echo "valid!";} else {echo "invalid"; }

 

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...