微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP加密技术的简单实现

一、MD5加密

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

rush:PHP;"> PHP require_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 "";
}else {
echo "Failure!";
echo "";
}
}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 "";
}else {
echo "failure";
echo "";
}
}

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

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为干扰项,可以理解为椒盐噪声;

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

基本没什么要说的,就一点,crypt的加密有不同的加密算法,认的是MD5加密,但是若是不给定

“盐值”

,每次刷新,都是不一样的结果;

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

rush:PHP;"> 1223b8c30a347321299611f873b449ad $1$ed0.Ph..$fPbfhSOMLyNdtZn9krT8X/ im37cLeO/JPaQ th12A1V7QCns. $1$this is $Bu9FE8Y8oGnIbftjDA4ez0

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

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

三、Sha1

同样是

单向加密

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

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

rush:PHP;"> /** * Sha1 */ echo "
"; echo sha1('shit'); echo "
"; echo sha1('shit',true); echo "
"; echo sha1('admin');

所以,一般加密保存,不要单独使用这些密码,不如这样子

混合使用

rush:PHP;"> echo "
"; echo sha1(sha1('admin',true)); echo "
"; echo sha1(md5('admin'));

等于是加密外面又自行进行了简单的加密!!

四、URL编码加密

对地址栏信息进行加密;

双向,urlencode和urldecode;

rush:PHP;"> /** * URL编码加密 */

$str="this is a test";
$result=urlencode($str);
echo $result;
echo "


";
echo urldecode($result);
echo "
";
$str="login.PHP?username=shit&action=act%3 hape#123\";
echo urlencode($str);
echo "
";

echo "Shit Login";
print_r($_GET);
echo "


";
//所以地址栏进行一下编码,一方面是保密,一方面是处理特殊情况
//比如username&shit是一个整体,不编码的话,浏览器是看不出的
echo "Shit Login2";
print_r($_GET);
echo "
";
$str="username&shit";
$str2="username=".urlencode($str)."&gender=".urlencode("male");
echo "Shit Login3";
print_r($_GET);
echo "
";
//baidu example
//https://www.baidu.com/s?ie=utf8&wd=url%E7%BC%96%E7%A0%81%E5%8A%A0%E5%AF%86&tn=87048150_dg
//search url编码

结果如下

username&shit [gender] => male ) Shit Login2Array ( [username] => username&shit [gender] => male ) Shit Login3Array ( [username] => username&shit [gender] => male )

所以

功能就是:地址栏更加安全,不再明文传输,另一个解决特殊情况的传递

五、Base64编码加密

其实base64不是加密技术,只不过他会对data进行base64的编码,也可以看做是一种加密技术;

rush:PHP;"> /** * Base64 */

$data="I am king";
echo base64_encode($data);
echo "


";
echo base64_decode(base64_encode($data));
echo "
";
echo base64_encode("中文测试");
echo "
";
// echo base64_decode("R0lGODlhAQABAIAAAP///wAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==");
$data=file_get_contents("0.jpg");
echo base64_encode($data);

等于说是

内容进行加密

总结

单项散列加密:得到固定长度的输出,是单向的;

对称散列加密:使用同一把密钥进行加密解密,可以相互推算;(算法简单,效率高,开销小,适合对大量数据进行加密)DES等

非对称加密技术:密钥不一样,公钥和私钥之分

以上这篇PHP加密技术的简单实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程之家。

原文地址:https://www.jb51.cc/php/19085.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐