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 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');     }  
    • Por violin101
      Caros amigos, saudações.
       
      Gostaria de tirar uma dúvida com os amigos, referente a PDV.
       
      Estou escrevendo um Sistema com Ponto de Vendas, a minha dúvida é o seguinte, referente ao procedimento mais correto.

      Conforme o caixa vai efetuando a venda, o Sistema de PDV já realiza:
      a baixa direto dos produtos no estoque
      ou
      somente após concretizar a venda o sistema baixa os produtos do estoque ?
       
      Grato,
       
      Cesar
       
    • Por violin101
      Caros amigos do grupo, saudações e um feliz 2025.
       
      Estou com uma pequena dúvida referente a Teclas de Atalho.

      Quando o Caps Lock está ativado o Comando da Tecla de Atalho não funciona.
      ou seja:
      se estiver para letra minúscula ====> funciona
      se estiver para letra maiúscula ====> não funciona
       
      Como consigo evitar essa falha, tanto para Letra Maiúscula quanto Minúscula ?

      o Código está assim:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'r' ) return;// Não é Ctrl+r, portanto interrompemos o script evt.preventDefault(); });  
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
×

Informação importante

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