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中unlink()、mkdir()、rmdir()等方法的使用介绍
Dec 21 PHP
关于使用coreseek并为其做分页的介绍
Jun 21 PHP
对于PHP 5.4 你必须要知道的
Aug 07 PHP
PHP模拟asp中response类实现方法
Aug 08 PHP
php通过smtp邮件验证登陆的方法
May 11 PHP
Laravel 5.3 学习笔记之 错误&amp;日志
Aug 28 PHP
PHP CURL post数据报错 failed creating formpost data
Oct 16 PHP
PHPCMS V9 添加二级导航的思路详解
Oct 20 PHP
thinkPHP微信分享接口JSSDK用法实例
Jul 07 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
Sep 22 PHP
微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解
Apr 10 PHP
Laravel框架源码解析之模型Model原理与用法解析
May 14 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
在windows服务器开启php的gd库phpinfo中未发现
2013/01/13 PHP
php中如何判断一个网页请求是ajax请求还是普通请求
2013/08/10 PHP
php无限分类使用concat如何实现
2015/11/05 PHP
用PHP的socket实现客户端到服务端的通信实例详解
2017/02/04 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
JS JavaScript获取Url参数,src属性参数
2021/03/09 Javascript
简单的JavaScript互斥锁分享
2014/02/02 Javascript
javascript属性访问表达式用法分析
2015/04/25 Javascript
Javascript vue.js表格分页,ajax异步加载数据
2016/10/24 Javascript
angularJS 发起$http.post和$http.get请求的实现方法
2017/05/18 Javascript
JavaScript原型继承_动力节点Java学院整理
2017/06/30 Javascript
使用Bootstrap + Vue.js实现表格的动态展示、新增和删除功能
2017/11/27 Javascript
D3.js实现拓扑图的示例代码
2018/06/30 Javascript
解决angular2 获取到的数据无法实时更新的问题
2018/08/31 Javascript
Electron-vue脚手架改造vue项目的方法
2018/10/22 Javascript
通过js示例讲解时间复杂度与空间复杂度
2019/08/06 Javascript
在Layui 的表格模板中,实现layer父页面和子页面传值交互的方法
2019/09/10 Javascript
js消除图片小游戏代码
2019/12/11 Javascript
Vue组件模板及组件互相引用代码实例
2020/03/11 Javascript
vue iview实现动态新增和删除
2020/06/17 Javascript
Python获取当前时间的方法
2014/01/14 Python
Python元组拆包和具名元组解析实例详解
2018/03/26 Python
python读取excel指定列数据并写入到新的excel方法
2018/07/10 Python
django+echart数据动态显示的例子
2019/08/12 Python
利用python实现冒泡排序算法实例代码
2019/12/01 Python
django 解决model中类写不到数据库中,数据库无此字段的问题
2020/05/20 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
2020/05/22 Python
利用css3 translate完美实现表头固定效果
2017/02/28 HTML / CSS
欧缇丽美国官网:Caudalie美国
2016/12/31 全球购物
实习单位接收函模板
2014/01/10 职场文书
一年级评语大全
2014/04/23 职场文书
开学典礼策划方案
2014/05/28 职场文书
先进班集体事迹材料
2014/12/25 职场文书
《弟子规》读后感:知廉耻、明是非、懂荣辱、辨善恶
2019/12/03 职场文书
本地通过nginx配置反向代理的全过程记录
2021/03/31 Servers
详解Nginx的超时keeplive_timeout配置步骤
2022/05/25 Servers