首页 > 开发 > PHP > 正文

PHP加密技术的简单实现

2024-05-04 22:52:58
字体:
来源:转载
供稿:网友

一、MD5加密

直接干,这里以一个登录页面为例:

<?phprequire_once 'config/database.config.php';$act=$_REQUEST['act'];$username=$_POST['username'];$password=md5($_POST['password']);if ($act=='reg') {  $sql="INSERT INTO user(username,password) VALUES('{$username}','{$password}')";  $result=mysqli_query($link, $sql);    if ($result) {    echo "Success";    echo "<meta http-equiv='refresh' content='1;url=login.html'/>";  }else {    echo "Failure!";    echo "<meta http-equiv='refresh' content='1;url=reg.html'/>";  }}elseif ($act=='login') {  $sql="SELECT * FROM user WHERE username='{$username}' AND password='{$password}'";  $result=mysqli_query($link, $sql);  $validate=mysqli_fetch_array($result);  //var_dump($validate);  if ($validate) {    echo "success";    echo "<meta http-equiv='refresh' content='1;url=http://www.baidu.com'/>";  }else {    echo "failure";    echo "<meta http-equiv='refresh' content='1;url=login.html'/>";  }}

主要就是记得比对的时候也使用MD5,所以存在数据库中的时候就是密码保存的了

mysql> SELECT * FROM user;+----+----------+----------------------------------+| id | username | password             |+----+----------+----------------------------------+| 1 | 123   | d41d8cd98f00b204e9800998ecf8427e || 2 | 123   | 5e12a8f9c9e959060fdcaea165393039 || 3 |     | d41d8cd98f00b204e9800998ecf8427e || 4 | root   | 202cb962ac59075b964b07152d234b70 || 5 | root   | 0c51f0ba4316a5c844397f69effe2d01 |+----+----------+----------------------------------+

二、Crypt加密算法

同样是一个单向加密算法,无法由密文直接得到明文密码(和MD5一样);

语法:string crypt(string $str[,string $salt]),$str为加密明文,$salt为干扰项,可以理解为椒盐噪声;

/** * Crypt */echo crypt('shit');echo "<hr/>";echo crypt('shit','im');echo "<hr/>";if (CRYPT_EXT_DES) {  echo crypt('shit','this is a test');}echo "<hr/>";if (CRYPT_MD5) {  echo crypt('shit','$1$this is a test$');}

基本没什么要说的,就一点,crypt的加密有不同的加密算法,默认的是MD5加密,但是若是不给定“盐值”,每次刷新,都是不一样的结果;

然后可以指定盐值,具体参见手册,每个算法的盐值长度是不一样的,比如上述的DES和MD5,结果如下

1223b8c30a347321299611f873b449ad$1$ed0.Ph..$fPbfhSOMLyNdtZn9krT8X/im37cLeO/JPaQth12A1V7QCns.$1$this is $Bu9FE8Y8oGnIbftjDA4ez0

DES只能取两位,而MD5取了8位;

用法上也差不多,记得输入盐值才好。

三、Sha1

同样是单向加密,不可破解(但网上的办法都是类似数据库一样的“伪暴力”破解);

与MD5的区别在于返回更长的(40位)16进制的数串(MD5是32位);

/** * Sha1 */echo "<hr/>";echo sha1('shit');echo "<hr/>";echo sha1('shit',true);  echo "<hr/>";echo sha1('admin');            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表