网站开发日志

2009年10月12日星期一

分享家:Addthis中国

密码加密

我经常在数据库的表里或者在代码里看到未经加密的密码,这是一个很不好的习惯。PHP里提供很多种的密码加密函数,在正式的项目开发里,我们应该要重视密码的加密。

我们可以在用户注册帐号的时候,使用md5()或者sha1()加密用户输入的密码,然后保存在数据库里。下次用户登入的时候,把用户输入的密码通过md5()或者sha1()函数计算出加密值,然后用这个加密值和数据库里的保存密码进行比较,如果相等就代表密码正确,反之亦然。

实例代码如下:

<?hpp
$pass=$_POST['pass']; 
$save = md5($pass); //保存这个加密过的密码
if(strcmp(md5($pass),$save)==0)
  echo"密码正确";
else
  echo"密码不对";
?>

注意使用md5或者sha1()加密过后的值是不可以逆的,也就是说通过这个加密值你无法还原原始值。所以如果你忘记密码,你只有重新设置密码。

有时候,你可能需要一个可以还原的加密方法。这时使用上面的加密函数就行不通了,但是你完全可以自己写一个,这里就要介绍一个用base64_encode()和base64_decode()来创建自定义密码加密的方法。

首先,创建下来LIB文件,命名为pass.php, 保存在你的库文件目录下。

<?php
function myencode($str)
{
  for($i=0; $i<5;$i++)
  {
    $str=strrev(base64_encode($str));
  }
  return $str;
}
function mydecode($str){
  for($i=0; $i<5;$i++)
  {
    $str=base64_decode(strrev($str)); 
  }
  return $str;
}
?>

然后,用下面的代码创建一个加密后的密码:

<?php 
include ("LIB/pass.php");
echo myencode($argv[1]);
?>

把上面代码命名为mypass.php, 然后在命令行运行:

php mypass.php 61dh
VZlSXRVVONXTWl1daZkVaNGbKVVVB1TP

最后,在实际代码里,使用这个来代替加密过的代码来代替真实密码。

<?php
include ("LIB/pass.php");
$pass = 'VZlSXRVVONXTWl1daZkVaNGbKVVVB1TP';
$real_pass = mydeocde($pass);
?>

当然,这种方法只是在一定程度上保护了密码,如果别人可以介入你的库文件(pass.php),加密的字符串将马上就可以被还原。但是这总是比让人一目了然就看到你的密码来的好。

标签:

相关文章:

0 条评论:

发表评论

指向此帖子的链接:

创建链接