PHP加密技术的简单实现


Posted in PHP onSeptember 04, 2016

一、MD5加密

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

<?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 "<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/JPaQ
th12A1V7QCns.
$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');

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

echo "<hr/>";
echo sha1(sha1('admin',true));
echo "<hr/>";
echo sha1(md5('admin'));

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

四、URL编码加密

对地址栏信息进行加密;

双向,urlencode和urldecode;

/**
 * URL编码加密
 */

$str="this is a test";
$result=urlencode($str);
echo $result;
echo "<hr/>";
echo urldecode($result);
echo "<hr/>";
$str="login.php?username=shit&action=act%3 hape#123\\";
echo urlencode($str);
echo "<hr/>";

echo "<a href='index.php?username=shit&gender=male'>Shit Login</a>";
print_r($_GET);
echo "<hr/>";
//所以地址栏进行一下编码,一方面是保密,一方面是处理特殊情况
//比如username&shit是一个整体,不编码的话,浏览器是看不出的
echo "<a href='index.php?username=username&shit&gender=male'>Shit Login2</a>";
print_r($_GET);
echo "<hr/>";
$str="username&shit";
$str2="username=".urlencode($str)."&gender=".urlencode("male");
echo "<a href='index.php?".$str2."'>Shit Login3</a>";
print_r($_GET);
echo "<hr/>";
//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编码

结果如下

this+is+a+test
this is a test
login.php%3Fusername%3Dshit%26action%3Dact%253+hape%23123%5C
Shit LoginArray ( [username] => username&shit [gender] => male ) 
Shit Login2Array ( [username] => username&shit [gender] => male ) 
Shit Login3Array ( [username] => username&shit [gender] => male )

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

五、Base64编码加密

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

/**
 * Base64
 */

$data="I am king";
echo base64_encode($data);
echo "<hr/>";
echo base64_decode(base64_encode($data));
echo "<hr/>";
echo base64_encode("中文测试");
echo "<hr/>";
// echo base64_decode("R0lGODlhAQABAIAAAP///wAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==");
$data=file_get_contents("0.jpg");
echo base64_encode($data);

 等于说是对内容进行加密

总结

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

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

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

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

PHP 相关文章推荐
PHP 创建标签云函数代码
May 26 PHP
php array_pop()数组函数将数组最后一个单元弹出(出栈)
Jul 12 PHP
php防止SQL注入详解及防范
Nov 12 PHP
PHP中设置一个严格30分钟过期Session面试题的4种答案
Jul 30 PHP
PHP实现对站点内容外部链接的过滤方法
Sep 10 PHP
php实现压缩多个CSS与JS文件的方法
Nov 11 PHP
php获取twitter最新消息的方法
Apr 14 PHP
100行PHP代码实现socks5代理服务器
Apr 28 PHP
CI框架数据库查询之join用法分析
May 18 PHP
CakePHP框架Model关联对象用法分析
Aug 04 PHP
Phpstorm+Xdebug断点调试PHP的方法
May 14 PHP
PHP pthreads v3下同步处理synchronized用法示例
Feb 21 PHP
PHP简单检测网址是否能够正常打开的方法
Sep 04 #PHP
PHP简单字符串过滤方法示例
Sep 04 #PHP
windows7配置Nginx+php+mysql的详细教程
Sep 04 #PHP
使用ThinkPHP的自动完成实现无限级分类实例详解
Sep 02 #PHP
CentOS 7.2 下编译安装PHP7.0.10+MySQL5.7.14+Nginx1.10.1的方法详解(mini版本)
Sep 01 #PHP
PHP数组编码gbk与utf8互相转换的两种方法
Sep 01 #PHP
Yii2框架数据库简单的增删改查语法小结
Aug 31 #PHP
You might like
PHP学习之数组的定义和填充
2011/04/17 PHP
PHP中require和include路径问题详解
2014/12/25 PHP
php安装ssh2扩展的方法【Linux平台】
2016/07/20 PHP
JS实现打开本地文件或文件夹
2021/03/09 Javascript
jQuery结合PHP+MySQL实现二级联动下拉列表[实例]
2011/11/15 Javascript
JQquery的一些使用心得分享
2012/08/01 Javascript
JavaScript简单实现鼠标拖动选择功能
2014/03/06 Javascript
JSP中使用JavaScript动态插入删除输入框实现代码
2014/06/13 Javascript
js使用递归解析xml
2014/12/12 Javascript
Jquery动态替换div内容及动态展示的方法
2015/01/23 Javascript
JS实现的3D拖拽翻页效果代码
2015/10/31 Javascript
js封装tab标签页实例分享
2016/12/19 Javascript
详解Vue使用命令行搭建单页面应用
2017/05/24 Javascript
vue刷新和tab切换实例
2018/02/11 Javascript
vue watch监听对象及对应值的变化详解
2018/02/24 Javascript
详谈vue+webpack解决css引用图片打包后找不到资源文件的问题
2018/03/06 Javascript
详解Vue-cli webpack移动端自动化构建rem问题
2018/04/07 Javascript
JavaScript错误处理操作实例详解
2019/01/04 Javascript
用VueJS写一个Chrome浏览器插件的实现方法
2019/02/27 Javascript
Vuejs学习笔记之使用指令v-model完成表单的数据双向绑定
2019/04/29 Javascript
Vue结合路由配置递归实现菜单栏功能
2020/06/16 Javascript
echarts柱状图背景重叠组合而非并列的实现代码
2020/12/10 Javascript
python爬虫入门教程--HTML文本的解析库BeautifulSoup(四)
2017/05/25 Python
Python图像处理之图像的缩放、旋转与翻转实现方法示例
2019/01/04 Python
解决python 上传图片限制格式问题
2019/10/30 Python
Python2.7:使用Pyhook模块监听鼠标键盘事件-获取坐标实例
2020/03/14 Python
pyecharts调整图例与各板块的位置间距实例
2020/05/16 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
2020/06/12 Python
英国家电直销:Appliances Direct
2016/09/22 全球购物
Ralph Lauren意大利官方网站:时尚界最负盛名的品牌之一
2018/10/18 全球购物
比利时家具购买网站:Home24
2019/01/03 全球购物
机械设计及其自动化专业推荐信
2013/10/31 职场文书
应届护士推荐信
2013/11/16 职场文书
生产部统计员岗位职责
2014/01/05 职场文书
五十岁生日宴会答谢词
2014/01/15 职场文书
微信告警的zabbix监控系统 监控整个NGINX集群
2022/04/18 Servers