PHP加密技术
一、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加密技术的更多相关文章
- Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC
Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC 博客分类: Java/Security Javabase64macmd5sha 加密解密,曾经是我一 ...
- 斯诺登称NSA攻破互联网加密技术
据财新网报道,本已渐渐平静的斯诺登泄密事件在9月6日再掀波澜.英国<卫报>.美国<纽约时报>和美国非盈利调查新闻机构ProPublica联合报道称,根据斯诺登提供的大量文件,美 ...
- 运用加密技术保护Java源代码/定制ClassLoader
为什么要加密? 对于传统的C或C++之类的语言来说,要在Web上保护源代码是很容易的,只要不发布它就可以.遗憾的是,Java程序的源代码很容易被别人偷看.只要有一个反编译器,任何人都可以分析别人的代码 ...
- Java加密技术
相关链接: Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC Java加密技术(二)——对称加密DES&AES Java加密技术(三)——PBE算法 ...
- DRM加密技术是怎么一回事
有时我们在播放从网上下载的影视文件时会要求输入用户许可证,否则就不能正常播放,听说是用了一种DRM技术,请简单介绍一下. 答:通常这是利用了多媒体DRM加密技术保护版权(DRM是数字权限管理技术的缩写 ...
- 用Iconv应对NodeJs对称加密技术在汉字编码与NoSQL的一些坑洞
·起因 汉字编码技术在实际应用中总是会存在这样或者那样的问题,尤其是在一些热门NoSQL方面多少会遇到挑战.比方说Cassandra字符集还不直接支持GB2312,要想存储写汉字那可真是麻烦.当然这还 ...
- 非对称加密技术- RSA算法数学原理分析
非对称加密技术,在现在网络中,有非常广泛应用.加密技术更是数字货币的基础. 所谓非对称,就是指该算法需要一对密钥,使用其中一个(公钥)加密,则需要用另一个(私钥)才能解密. 但是对于其原理大部分同学应 ...
- Java进阶(七)Java加密技术之非对称加密算法RSA
Java加密技术(四)--非对称加密算法RSA 非对称加密算法--RSA 基本概念 非对称加密算法是一种密钥的保密方法. 非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(priv ...
- JAVA加密技术-----MD5 与SHA 加密
关于JAVA的加密技术有很多很多,这里只介绍加密技术的两种 MD5与 SHA. MD5与SHA是单向加密算法,也就是说加密后不能解密. MD5 ---信息摘要算法,广泛用于加密与解密技术,常用于文件校 ...
随机推荐
- 单机静默安装GI软件并创建ASM实例和ASM磁盘组
环境:RHEL 6.4 + Oracle 11.2.0.4 需求:单机静默安装GI软件并创建ASM实例和ASM磁盘组,为后续迁移数据库文件到ASM做准备 1. 安装配置GI软件 2. 创建ASM实例 ...
- SpringBoot中yaml配置对象
转载请在页首注明作者与出处 一:前言 YAML可以代替传统的xx.properties文件,但是它支持声明map,数组,list,字符串,boolean值,数值,NULL,日期,基本满足开发过程中的所 ...
- Oracle 中的操作符
1.union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序: SELECT * FROM emp WHERE sal < UNION SELECT * FROM emp WH ...
- 基于redis的处理session的方法
一个基于redis的处理session的方法,如下. <?php class Session_custom { private $redis; // redis实例 private $prefi ...
- LinqToXml (一) Create Xml file By Dom /Linq
目前,在xml 应用编程领域比较流行的开发模型是W3C 提供的DOM(文档对象模型),在.net Framework 通过命名空间 System.Xml 对该技术提供了支持.随着Linq to XMl ...
- AlloyRenderingEngine文本框组件
写在前面 Github: https://github.com/AlloyTeam/AlloyGameEngine 在dom元素里,自带了input标签,设置其type为text,它就是一个文本框. ...
- 深入理解DOM节点关系
× 目录 [1]父级属性 [2]子级属性 [3]同级属性[4]包含方法[5]关系方法 前面的话 DOM可以将任何HTML描绘成一个由多层节点构成的结构.节点分为12种不同类型,每种类型分别表示文档中不 ...
- 弹出层layer的使用
弹出层layer的使用 Intro layer是一款web弹层组件,致力于服务各个水平段的开发人员.layer官网:http://layer.layui.com/ layer侧重于用户灵活的自定义,为 ...
- 拖拽手势和清扫手势冲突时(UIPanGestureRecognizer和UISwipeGestureRecognizer冲突时)
故事发生在这样的情境上:给整个控制器添加了一个拖拽手势,然后又在控制上的每个Cell上加了左滑清扫手势,然后问题来了:只有拖拽手势起作用,而左滑手势没有效果了,然后怎么解决这个问题呢!先上图: 当给整 ...
- 关于DOM的一些总结(未完待续......)
DOM 实例1:购物车实例(数量,小计和总计的变化) 这里主要是如何获取页面元素的节点: document.getElementById("...") cocument.query ...