Maison php教程 php手册 PHP5中哈希创建和验证方法详解

PHP5中哈希创建和验证方法详解

May 25, 2016 pm 04:41 PM

如果你使用php5.5版本的话我们对于哈希创建和验证方法就简单多了,PHP 5.5为我们提供了4个函数:password_get_info(), password_hash(), password_needs_rehash(),和password_verify(),有了它们四我们就可以快速实现哈希创建和验证了.

首先讨论password_hash()函数,这将用作创建一个新的密码的哈希值,它包含三个参数:密码、哈希算法、选项。前两项为必须的,你可以根据下面的例子来使用这个函数,代码如下:

$password = 'foo'; 
$hash = password_hash($password,PASSWORD_BCRYPT); 
//$2y$10$uOegXJ09qznQsKvPfxr61uWjpJBxVDH2KGJQVnodzjnglhs2WTwHu
Copier après la connexion

你将注意到我们并没有给这个哈希加任何选项,现在可用的选项被限定为两个:cost 和salt,要添加选项你需要创建一个关联数组,代码如下:

$options = [ 'cost' => 10,'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM) ];
Copier après la connexion

将选项添加到 password_hash() 函数后,我们的哈希值变了,这样更加安全,代码如下:

$hash = password_hash($password,PASSWORD_BCRYPT,$options);
//$2y$10$JDJ5JDEwJDhsTHV6SGVIQuprRHZnGQsUEtlk8Iem0okH6HPyCoo22
Copier après la connexion

现在哈希创建完毕了,我们可以通过 password_get_info() 查看新建哈希值得相关信息,password_get_info() 需要一个参数——哈希值——并返回一个包含算法(所用哈希算法的整数代表形式)、算法名(所用哈希算法的可读名称)以及选项(我们用于创建哈希值得选项)的关联数组,代码如下:

var_dump(password_get_info($hash)); 
/* 
array(3) { 
  ["algo"]=> 
  int(1) 
  ["algoName"]=> 
  string(6) "bcrypt" 
  ["options"]=> 
  array(1) { 
["cost"]=> 
int(10) 
  }
}
Copier après la connexion

先一个被添加到 Password Hashing API 的是 password_needs_rehash(),它接受三个参数,hash、hash 算法以及选项,前两个是必填项, password_needs_rehash()用来检查一个hash值是否是使用特定算法及选项创建的,这在你的数据库受损需要调整hash时非常有用,通过利用 password_needs_rehash() 检查每个hash值,我们可以看到已存的hash 值是否匹配新的参数,仅影响那些使用旧参数创建的值.

最后,我们已经创建了我们的hash值,查阅了它如何被创建,查阅了它是否需要被重新hash,现在我们需要验证它,要验证纯文本到其hash值,我们必须使用 password_verify(),它需要两个参数,密码及hash值,并将返回 TRUE 或 FALSE,让我们检查一次我们获得的 hashed 看看是否正确,代码如下:

$authenticate = password_verify('foo','$2y$10$JDJ5JDEwJDhsTHV6SGVIQuprRHZnGQsUEtlk8Iem0okH6HPyCoo22'); 
//TRUE 
$authenticate = password_verify('bar','$2y$10$JDJ5JDEwJDhsTHV6SGVIQuprRHZnGQsUEtlk8Iem0okH6HPyCoo22'); 
//FALSE 
例 Example #1 password_verify() example,代码如下:
<?php 
// See the password_hash() example to see where this came from. 
$hash = &#39;$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq&#39;; 
 
if (password_verify(&#39;rasmuslerdorf&#39;, $hash)) { 
    echo &#39;Password is valid!&#39;; 
} else { 
    echo &#39;Invalid password.&#39;; 
} 
  
//以上例程会输出:Password is valid!
?>
Copier après la connexion

通过以上知识,你可以在新的 PHP 5.5.0 版本中迅速且安全的创建 hash 密码了.


教程链接:

随意转载~但请保留教程地址★

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)