PHP中的密码哈希

每个好的程序员都知道,密码决不能使用明文的方式存储。改为单项的哈希,这种方式在遇到入侵时用户的密码不会受到威胁。


在密码学中,一个加密的的哈希函数要完成的是获取一个输入并把它变成定长字符串(哈希值)的工作。
---wikipedia

PHP提供了简单的方式来构建这样的哈希,例如md5, sha1和crypt这些函数,如果你从头做一个application,这些函数将会经常用到。


但是有时你可能想让把现在使用的哈希算法变换并且对以前的就hach保持向后兼容。或者你可能想认证不同系统,但是这些使用了不同的哈希算法。


DokuWiki 支持很多种认证后台,要创建和验证密码哈希,我们有两个方法:auth_crytPassword() 和 auth_verifyPassword()。这些方法是完全自包含同时也能在DokuWiki之外使用。


auth_cryptPassword() 用来从给定的纯文本创建一个新的hash,它第一个参数是需要加密的文本内容,第二个参数是需要的加入算法。目前支持的加密算法有:


smd5 - Salted MD5 hashing
apr1 - Apache salted MD5 hashing
md5 - Simple MD5 hashing
sha1 - SHA1 hash
ssha - Salted SHA1 hashing
crypt - Unix crypt
mysql - MySQL password(old method)
my411 - MySQL 4.1.1 password


想要创建一个哈希值,只需要调用如下代码
$hash = auth_cryptPassword ('mypassword', 'smd5');




这个生成树来的hash值可以存储到用户表,用来在之后使用auth_verifyPassword()验证。


$hash_from_db = db_get_hash($_POST['user']);


$ok = auth_verifyPassword($_POST['pass'], $hash_from_db);


这里很漂亮的一点是使用auth_verifyPassword()是在创建和验证密码hash时,自动检测使用那种加密算法。通过这种方式,在同一个数据库中可以使用不同的hash算法。



原文:www.splitbrain.org/blog/2008-07/28-working_with_password_hashes_in_php/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值