Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Web.Developer

Função password_hash

Recommended Posts

Após meses de estudo sobre criptografia cheguei a conclusão de usar a password_hash nos desenvolvimentos de meus projetos.

Inclusive combino este método com o Salt.

 

Claro que o método de armazenar os dados vai de programador para programador, você pode fazer combinações de criptografias, a fim de manter uma linha de segurança impenetrável.

 

Lembre-se sempre, segurança dos dados e aplicações em primeiro lugar.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Compartilhar este post


Link para o post
Compartilhar em outros sites

Grande @Gabriel Heming, obrigado por ter compartilhado esse link e as informações, eu li lá e não fazia ideia que existia o password_hash e que a segurança dele é mais atualizada comparado com o md5 e os sha, foi uma aula. Eu só não consegui entender como é possível verificar as senhas na hora do login usando o password_verify, visto que o hash gerado pelo password_hash pra uma mesma senha é diferente a cada vez que damos f5 por exemplo, coisa que com o md5, onde eu estava acostumado, não acontece. Falo isso na questão de identificar a senha que foi alocada no banco de dados usando password_hash pra comparar com a senha inserida no login utilizando password_verify.

Compartilhar este post


Link para o post
Compartilhar em outros sites
4 minutos atrás, BrunoMs disse:

Grande @Gabriel Heming, obrigado por ter compartilhado esse link e as informações, eu li lá e não fazia ideia que existia o password_hash e que a segurança dele é mais atualizada comparado com o md5 e os sha, foi uma aula. Eu só não consegui entender como é possível verificar as senhas na hora do login usando o password_verify, visto que o hash gerado pelo password_hash pra uma mesma senha é diferente a cada vez que damos f5 por exemplo, coisa que com o md5, onde eu estava acostumado, não acontece. Falo isso na questão de identificar a senha que foi alocada no banco de dados usando password_hash pra comparar com a senha inserida no login utilizando password_verify.

você tem que usar os dois password_hash para fazer novamente a senha que você digitou no method post. password_verify vai pegar as duas senhas a password_hash e a que esta no banco de dados se as duas for iguais passa na verificação se não, não

Compartilhar este post


Link para o post
Compartilhar em outros sites

@emersondesigner tava testando aqui e funcionou, pra verificar é bem parecido com o md5, o que eu ainda não entendo é como o password_verify consegue identificar o hash de password_hash, sendo que, por exemplo, pra uma mesma senha de "12345" ele retorna vários hash's diferentes se você ficar dando f5. To falando isso pq sou acostumado com o md5, onde pra uma senha "12345" ele retorna o mesmo hash sempre, mesmo dando f5.

Gostei pra caramba, vou passar a utilizar o password_hash a partir de agora.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@BrunoMs eu ouvir falar do tal SALT  por exemplo você digitou 123456 faz passar pelo MD5 depois pelo Password_Hash eu acho que resolve essa parte, eu ainda vou testar esse Função estou desenvolvendo um Banco Digital eu sou novo PHP sei bastante coisa mais coisa que eu sei não é quase nada ainda kkk tudo que eu aprendi até agora foi lendo, vendo vídeo aula tudo na raça  então fico fazendo as pergunta para tirar as minhas duvidas  :D faz parte

Compartilhar este post


Link para o post
Compartilhar em outros sites

@emersondesigner está correto, é por causa do salt. O salt é incluído no hash gerado, por isso a função password_verify consegue validar a senha.

 

Para mais informações, vejam o link abaixo:

https://pt.stackoverflow.com/a/193170/5007

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Gabriel Heming   ESTOU USANDO A FUNÇÃO

 

<?php

$novasenha = '123456'; // method post

              $options = [
            'cost' => 12,
            ];
            $cryptsenha = password_hash($novasenha, PASSWORD_BCRYPT, $options); // aqui vai inserir no data base e cadastrar normal


?>

agora parte de login

 

<?php 
            $senha = "123456";
            $options = [
            'cost' => 12,
            ];
			$cryptsenha = password_hash($senha,  PASSWORD_BCRYPT, $options);
            
             if (password_verify($cryptsenha, $usuarios[senha]) ) {
                 // me retona erro não consegue pegar a senha certa porque gera outra hash qual é problema ?
             } else {
                // 
             }
             
?>  

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
<?php
   
   
   $ver = "123456";
   $senha = md5($ver);
   
   $gerar = password_hash($senha, PASSWORD_DEFAULT);

   echo $gerar;

?>

<br> <br>

<?php

if (password_verify($senha, $gerar)) {
       
      echo "VALIDO";
      
   }else {
      echo "INVALIDO";  
   }

?>

assim funciona perfeitamente

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça dessa forma:

<?php 
// pega a senha inserida no formulário pelo usuário
$senha_do_login = "123456";// senha pura

// pega a senha que ta no banco de dados, mas gera uma aqui só pra teste
$senha = "123456";
$options = ['cost' => 12,];
$cryptsenha = password_hash($senha,  PASSWORD_BCRYPT, $options);

if (password_verify($senha_do_login, $cryptsenha) ) {
  echo "deu certo";
} else {
  exit();
}
             
?>

Não estava funcionando pra você pq você está utilizando o passwrod_hash na mesma metodologia de um MD5, você estava passando a senha que o usuário insere no formulário no password_hash pra depois verificar no password_verify, no caso você tem que inserir diretamente a senha do usuário no password_verify e em seguida colocar do lado a senha do usuário que está criptografada e está no seu banco de dados, a partir desse momento o password_verify faz a mágica.

Pra exemplificar melhor, é isso aqui:

if (password_verify("123456", "$2y$12$bjOLs54S9H/k8v0O3Jgcq.lY7fEA5VQMvJcIZKnUI2eUD139OiJEO") ) {
                 echo "deu certo";
}

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Rafael_Ferreira
      Não consigo carregar a imagem do captcha do meu formulário. Foi testado com o xampp e easyphp. Também não carregou a imagem de outros captcha. 
       
       
    • Por luiz monteiro
      Olá, tudo bem?
       
      Estou melhorando meu conhecimento em php e mysql e, me deparei com o seguinte. A tabela da base de dados tem um campo do tipo varchar(8) o qual armazena números. Eu não posso alterar o tipo desse campo. O que preciso é fazer um select para retornar o números que contenham zeros a direita ou a esquerda.
      O que tentei até agora
       
      Ex1
      $busca = $conexao->prepare("select campo form tabela where (campo = :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form']);
       
      Se a direita da string $_REQUEST['campo_form'] termina ou inicia com zero ou zeros, a busca retorna vazio.
      Inseri dados numéricos, da seguinte maneira para testar: 01234567;  12345670: 12345678: 12340000... entre outros nessa coluna. Todos os valores que não terminam ou não iniciam com zero ou zeros, o select funciona.
       
       
      Ex2
      $busca = $conexao->prepare("select campo form tabela where (campo = 0340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex3
      $busca = $conexao->prepare("select campo form tabela where (campo = '02340001' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex4
      $busca = $conexao->prepare("select campo form tabela where (campo like 2340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex5
      $busca = $conexao->prepare("select campo form tabela where (campo like '12340000') ");
      Esse número está cadastrado, mas não retorna.
       
      Ex6
      $busca = $conexao->prepare("select campo form tabela where (campo like '"12340000"' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex7
      $busca = $conexao->prepare("select campo form tabela where (campo like :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form'])
      Não retorna dados.
       
      O  $_REQUEST['campo_form'] é envio via AJAX de um formulário. 
      Usei o gettype para verificar o post, e ele retorna string.
      Fiz uma busca com número 12345678 para verificar o que o select retorna, e também retrona como string.
       
      Esse tipo de varchar foi usado porque os números que serão gravados nesse campo,  terão zeros a direita ou na esquerda. Os tipos number do mysql não gravam zeros, então estou usando esse. O problema é a busca.
      Agradeço desde já.
       
       
    • Por daemon
      Boa tarde,
       
      Eu tenho uma rotina que faz uma leitura do arquivo .xml de vários sites.

      Eu consigo pegar o tópico e a descrição, e mostrar a imagem que esta na pagina do link.
      Para isso utilizo esta função:
      function getPreviewImage($url) { // Obter o conteúdo da página $html = file_get_contents($url); // Criar um novo objeto DOMDocument $doc = new DOMDocument(); @$doc->loadHTML($html); // Procurar pela tag meta og:image $tags = $doc->getElementsByTagName('meta'); foreach ($tags as $tag) { if ($tag->getAttribute('property') == 'og:image') { return $tag->getAttribute('content'); } } // Se não encontrar og:image, procurar pela primeira imagem na página $tags = $doc->getElementsByTagName('img'); if ($tags->length > 0) { return $tags->item(0)->getAttribute('src'); } // Se não encontrar nenhuma imagem, retornar null return null; } // Uso: $url = "https://example.com/article"; $imageUrl = getPreviewImage($url); if ($imageUrl) { echo "<img src='$imageUrl' alt='Preview'>"; } else { echo "Nenhuma imagem encontrada"; }  
      Mas estou com um problema, esta funcão funciona quando coloco em uma pagina de teste.php. Preciso mostrar em uma página inicial diversas fotos de todos os links. (No caso acima só funciona 1).
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, me permita tirar uma dúvida com os amigos.

      Tenho um Formulário onde o Usuário digita todos os Dados necessários.

      Minha dúvida:
      --> como faço após o usuário digitar os dados e salvar, o Sistema chamar uma Modal ou mensagem perguntando se deseja imprimir agora ?

      Grato,
       
      Cesar
    • Por Carcleo
      Tenho uma abela de usuarios e uma tabela de administradores e clientes.
      Gostaria de uma ajuda para implementar um cadastro
       
      users -> name, login, passord (pronta) admins -> user_id, registratiom, etc.. client -> user_id, registratiom, etc...
      Queria ajuda para extender de user as classes Admin e Client
      Olhem como estáAdmin
      <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Admin extends User {     use HasFactory;            protected $fillable = [         'name',         'email',         'password',         'registration'     ];      private string $registration;     public function create(         string $name,          string $email,          string $password,         string $registration     )     {         //parent::create(['name'=>$name, 'email'=>$email, 'password'=>$password]);         parent::$name = $name;         parent::$email = $email;         parent::$password = $password;         $this->registration = $registration;     } } User
      <?php namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Database\Eloquent\Relations\BelongsToMany; class User extends Authenticatable {     /** @use HasFactory<\Database\Factories\UserFactory> */     use HasFactory, Notifiable;     static string $name;     static string $email;     static string $password;     /**      * The attributes that are mass assignable.      *      * @var list<string>      */     protected $fillable = [         'name',         'email',         'password',     ];          /**      * The attributes that should be hidden for serialization.      *      * @var list<string>      */     protected $hidden = [         'remember_token',     ];     /**      * Get the attributes that should be cast.      *      * @return array<string, string>      */     protected function casts(): array     {         return [             'email_verified_at' => 'datetime',             'password' => 'hashed',         ];     }          public function roles() : BelongsToMany {         return $this->belongsToMany(Role::class);     }       public function hasHole(Array $roleName): bool     {                 foreach ($this->roles as $role) {             if ($role->name === $roleName) {                 return true;             }         }         return false;     }         public function hasHoles(Array $rolesName): bool     {                 foreach ($this->roles as $role) {             foreach ($rolesName as $rolee) {             if ($role->name === $rolee) {                 return true;             }          }         }         return false;     }         public function hasAbility(string $ability): bool     {         foreach ($this->roles as $role) {             if ($role->abilities->contains('name', $ability)) {                 return true;             }         }         return false;     }     } Como gravar um Admin na tabela admins sendo que ele é um User por extensão?
      Tentei assim mas é claro que está errado...
      public function store(Request $request, Admin $adminModel) {         $dados = $request->validate([             "name" => "required",             "email" => "required|email",             "password" => "required",             "registration" => "required"         ]);         $dados["password"] =  Hash::make($dados["password"]);                  $admin = Admin::where("registration",  $dados["registration"])->first();                  if ($admin)              return                    redirect()->route("admin.new")                             ->withErrors([                                 'fail' => 'Administrador já cadastrados<br>, favor verificar!'                   ]);                            $newAdmin = $adminModel->create(                                    $dados['name'],                                    $dados['email'],                                    $dados['password'],                                    $dados['registration']                                 );         dd($newAdmin);         $adminModel->save();         //$adminModel::create($admin);                  return redirect()->route("admin.new")->with("success",'Cadastrado com sucesso');     }  
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.