PHP的几种加密解密算法

本文介绍了PHP中常用的加密解密技术,包括md5、crypt、sha1、base64编码解码、url编码解码以及自定义数字加密解密算法。通过实例展示了各种算法的实现过程和加密解密结果。

PHP的几种加密解密算法

一、开发环境

1、Windows+Apache+MySQL+PHP的环境。

2、文本编辑器:Sublime。

二、主要技术

PHP

三、实验内容与结果

本文主要介绍PHP的几种加密解密技术。主要有md5、crypt、sha1、base64_encode(base64_decode)、urlencode(urldecode)还有一种自定义的数字加密算法。下面主要通过几个例子来展示其加密效果。

3.1、md5加密技术

Md5是一种单向的加密技术,不可逆,不能进行解密。md5() 函数使用 RSA 数据安全,包括 MD5 报文摘要算法。MD5 报文摘要算法将任意长度的信息作为输入值,并将其换算成一个 128 位长度的"指纹信息"或"报文摘要"值来代表这个输入值,并以换算后的值作为结果。

(1)实现过程

<?php

/**

 *md5加密算法

 */

echo"<form action='' method='post'>";

echo "<input type='text'name='text'>";

echo "<input type='submit' name='sub'value='md5加密'>";

echo "</form>";

// md5加密

if(isset($_POST['sub'])){

         $str=$_POST['text'];

         $md5str=md5($str);

         echo "加密结果:".$md5str;

 

}

 

?>

(2)结果测试

比如输入“123$#%d&3e*wsc”进行测试,将会得到如图1所示的加密结果。


图1. md5加密结果测试

3.2、crypt加密技术

crypt是一种单向的加密技术,不可逆,不能进行解密。具体的算法依赖于 salt 参数的格式和长度。通过增加由使用特定加密方法的特定字符串所生成的字符串数量,salt可以使加密更安全。

(1)实现过程

<?php

/**

 *crypt加密算法

 *其单向加密,不可逆,不可解密

 */      

         echo "<form action=''method='post'>";

         echo "<input type='text'name='text'>";

         echo "<input type='submit'name='sub' value='crypt加密'>";

         echo "</form>";

         // crypt加密

         if(isset($_POST['sub'])){

                  $str=$_POST['text'];

                  $cryptstr=crypt($str,'r2');  // 'r2'为盐值,默认是随机生成的两位字串

                  echo "加密结果:".$cryptstr;

         }

?>

(2)结果测试

比如输入“123$#%d&3e*wsc”进行测试,将会得到如图2所示的加密结果。

 


图2. cryt加密结果测试

 

3.3、sha1加密技术

Sha1是一种单向的加密技术,不可逆,不能进行解密。

(1)实现过程

<?php

/**

 *sha1加密算法

 *其单向加密,不可逆,不可解密

 */      

         echo "<form action=''method='post'>";

         echo "<input type='text'name='text'>";

         echo "<input type='submit'name='sub' value='sha1加密'>";

         echo "</form>";

         // sha1加密

         if(isset($_POST['sub'])){

                  $str=$_POST['text'];

                  $sha1str=sha1($str);

                  echo "加密结果:".$sha1str;

         }

?>

(2)结果测试

比如输入“123$#%d&3e*wsc”进行测试,将会得到如图3所示的加密结果。


图3. Sha1加密结果测试

 

3.4、base64编码加密、解密技术

设计此种编码是为了使二进制数据可以通过非纯 8-bit 的传输层传输,例如电子邮件的主体。

(1)实现过程

<?php

/**

 *Base64编码加密技术

 *base64_encode — 使用 MIME base64 对数据进行编码

 *string base64_encode ( string $data ) ,使用 base64 data *进行编码。设计此种编码是为了使二进制数据可以通过非纯 8-bit *的传输层传输,例如电子邮件的主体。

 */

         echo "<form action=''method='post'>";

         echo "<input type='text'name='text'>";

         echo "<input type='submit'name='sub' value='加密'>";

         echo "</form>";

         // 加密

         if(isset($_POST['sub'])){

                  $str=$_POST['text'];

                  $enstr=base64_encode($str);

                  echo "加密结果:".$enstr."<br/>";

                  @session_start();

                  $_SESSION['entsr']=$enstr;

                  echo "<ahref='base64.php?pwd=1'>解密</a>";

         }

         // 解密

         if($pwd=isset($_GET['pwd'])){

                  @session_start();

                  $str=@$_SESSION['entsr'];

                  $destr=base64_decode($str);

                  echo "解密结果:".$destr."<br/>";

         }

?>

(2)结果测试

比如输入“123$#%d&3e*wsc”进行测试,将会得到如图4所示的加密结果。


图4. Base64_encode加密结果测试

然后点击“解密”,可以得到如图5所示的解密结果。


图5. Base64_decode加密结果测试

3.5、url编码加密、解密技术

url编码加密技术使用urlencode/urldecode实现加密解密,urlencode()返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。注意:只对非字母数字进行处理。

(1)实现过程

<?php

/**

 *url编码加密技术

 */      

         echo "<form action=''method='post'>";

         echo "<input type='text'name='text'>";

         echo "<input type='submit'name='sub' value='加密'>";

         echo "</form>";          

         // 加密

         if(isset($_POST['sub'])){

                  $str=$_POST['text'];

                  $enstr=urlencode($str);

                  echo "加密结果:".$enstr."<br/>";

                  @session_start();

                  $_SESSION['entsr']=$enstr;

                  echo "<ahref='urlcode.php?pwd=1'>解密</a>";

         }

         // 解密

         if($pwd=isset($_GET['pwd'])==1){

                  @session_start();

                  $str=@$_SESSION['entsr'];

                  $destr=urldecode($str);

                  echo "解密结果:".$destr."<br/>";

         }

?>

(2)结果测试

比如输入“123$#%d&3e*wsc”进行测试,将会得到如图5所示的加密结果。


图6. urlcode加密结果测试

然后点击“解密”,可以得到如图7所示的解密结果。


图7. Urldecode解密结果测试

3.6、自定义数字加密、解密算法

主要使用位运算符对数字进行加密、解密。

(1)实现过程

<?php

/**

 *自定义数字加密算法

 */      

         echo "<form action=''method='post'>";

         echo "数字口令:<input type='text' name='text'>";

         echo "<input type='submit'name='sub' value='确定'>";

         echo "</form>";

         define("PI",3.1415926);

         // 自定义加密算法

         function Encrypt($str){

                  return $str=$str<<PI;

         }

         // 自定义解密算法

         function Decrypt($str){

                  return $str=$str>>PI;

         }

         if(isset($_POST['sub'])){

                  echo "加密口令&nbsp;&nbsp;".Encrypt($_POST['text'])."</br>";  // 输出口令

                  @session_start();

                  $_SESSION['pwd']=Encrypt($_POST['text']);

 

                  echo "<a href='zdy.php?pwd=1'>解密口令</a>";

         }

         @session_start();

         if(isset($_GET['pwd'])){

                  echo "解密口令&nbsp;&nbsp;".Decrypt($_SESSION['pwd']);

         }

?>

(2)结果测试

比如输入“123456789”进行测试,将会得到如图8所示的加密结果。


图8.自定义算法加密结果测试

然后点击“解密”,可以得到如图9所示的解密结果。


图9.自定义算法解密结果测试

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值