php安全的密码存储方式,如何安全地存储用户的密码?

获得密码存储方案安全的最简单方法是使用标准库.

由于安全性往往要复杂得多,而且比大多数程序员单独处理的可能性更不可见,所以使用标准库几乎总是最简单和最安全的(如果不是唯一的)可用选项。

新的PHP密码API(5.5.0+)

如果使用的是PHP5.5.0或更高版本,则可以使用新的简化密码散列API

使用PHP密码API的代码示例:<?php // $hash is what you would store in your database$hash = password_hash($_POST['password'], PASSWORD_DEFAULT, ['cost' => 12]);

// $hash would be the $hash (above) stored in your database for this user$checked = password_verify($_POST['password'], $hash);if ($checked) {

echo 'password correct';} else {

echo 'wrong credentials';}

(如果您仍在使用遗留5.3.7或更高版本,则可以安装ircmaxell/Password Comat访问内置函数)

改进盐渍散列:加入胡椒粉

如果你想要额外的安全,安全人员现在(2017年)建议增加一个‘胡椒粉‘到(自动)咸密码散列。

有一个简单的类可以安全地实现这个模式,我建议:Netsilik/PepperedPassword (GitHub).

它附带麻省理工学院的许可证,所以你可以任意使用它,甚至在专有项目中也是如此。

代码使用示例Netsilik/PepperedPasswords:<?phpuse  Netsilik/Lib/PepperedPasswords;// Some long, random, binary string, encoded as hexadecimal; stored in your configuration

(NOT in your Database, as that would defeat the entire purpose of the pepper).$config['pepper'] = hex2bin('012345679ABCDEF01234

5679ABCDEF012345679ABCDEF012345679ABCDEF');$hasher = new PepperedPasswords($config['pepper']);// $hash is what you would store in yo

ur database$hash = $hasher->hash($_POST['password']);// $hash would be the $hash (above) stored in your database for this user$chec

ked = $hasher->verify($_POST['password'], $hash);if ($checked) {

echo 'password correct';} else {

echo 'wrong credentials';}

旧标准图书馆请注意:你不应该再需要这个了!这只是为了历史的目的。

看一看:可移植PHP密码散列框架: PPASS并确保您使用CRYPT_BLOWFISH算法,如果有可能的话。

使用phpass(v0.2)的代码示例:<?phprequire ('PasswordHash.php');$pwdHasher = new PasswordHash(8, FALSE);

// $hash is what you would store in your database$hash = $pwdHasher->HashPassword( $password );

// $hash would be the $hash (above) stored in your database for this user$checked = $pwdHasher->CheckPassword($password, $hash);

if ($checked) {

echo 'password correct';} else {

echo 'wrong credentials';}

PHPass已在一些非常著名的项目中得到实施:phpBB3

WordPress 2.5+和bbPress

Drupal 7版本(模块可用于Drupal 5和6)

好的是,你不需要担心细节,这些细节已经由有经验的人编程,并在互联网上的许多人审查。

有关密码存储方案的详细信息,请参阅杰夫博文:你可能把密码放错了

不管你做什么如果你去我自己来,谢谢“接近,不使用MD5或SHA1更多..它们是不错的散列算法,但是考虑到了为安全目的而中断.

目前,使用地窖,使用地窖_河豚是最好的做法。

PHP中的crypt_BUFISH是bcrypt散列的一个实现。bcrypt基于Blowfish分组密码,利用它昂贵的密钥设置来降低算法的速度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值