一、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为干扰项,可以理解为椒盐噪声;
/**
* 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,结果如下
1 1223b8c30a347321299611f873b449ad
2 $1$ed0.ph..$fpbfhsomlyndtzn9krt8x/
3 im37cleo/jpaq
4 th12a1v7qcns.
5 $1$this is $bu9fe8y8ognibftjda4ez0des只能取两位,而md5取了8位;
用法上也差不多,记得输入盐值才好。
三、sha1
同样是单向加密,不可破解(但网上的办法都是类似数据库一样的“伪暴力”破解);
与md5的区别在于返回更长的(40位)16进制的数串(md5是32位);
/**
* sha1
*/
echo ;
echo sha1('shit');
echo ;
echo sha1('shit',true);
echo ;
echo sha1('admin');
所以,一般加密保存,不要单独使用这些密码,不如这样子混合使用:
echo ;
echo sha1(sha1('admin',true));
echo ;
echo sha1(md5('admin'));
等于是加密外面又自行进行了简单的加密!!
四、url编码加密
对地址栏信息进行加密;
双向,urlencode和urldecode;
/**
* 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编码
结果如下
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 ;
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等
非对称加密技术:密钥不一样,公钥和私钥之分