【bf88必发唯一官网】PHP内置加密函数详解,PHP加密技术
一、MD5加密
Md5()加密算法
一、MD5加密
一、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(string $str [, bool $raw_output = false])
<?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'/>";
}
}
<?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,所以存在数据库中的时候就是密码保存的了
$str:原始字符串
mysql> SELECT * FROM user;
+----+----------+----------------------------------+
| id | username | password |
+----+----------+----------------------------------+
| 1 | 123 | d41d8cd98f00b204e9800998ecf8427e |
| 2 | 123 | 5e12a8f9c9e959060fdcaea165393039 |
| 3 | | d41d8cd98f00b204e9800998ecf8427e |
| 4 | root | 202cb962ac59075b964b07152d234b70 |
| 5 | root | 0c51f0ba4316a5c844397f69effe2d01 |
+----+----------+----------------------------------+
$raw_output:如果可选的raw_output被设置为true,
那么md5报文摘要将以16字节长度的原本二进制格式再次回到.
重返以32位字符十六进制数字格局再次回到散列值
重中之重就是纪念比对的时候也应用MD5,所以存在数据库中的时候即便密码保存的了
bf88必发唯一官网,第一就是回想比对的时候也使用MD5,所以存在数据库中的时候就是密码保存的了
二、Crypt加密算法
md5二次加密:md5(md5($string, true))
mysql> SELECT * FROM user;
+----+----------+----------------------------------+
| id | username | password |
+----+----------+----------------------------------+
| 1 | 123 | d41d8cd98f00b204e9800998ecf8427e |
| 2 | 123 | 5e12a8f9c9e959060fdcaea165393039 |
| 3 | | d41d8cd98f00b204e9800998ecf8427e |
| 4 | root | 202cb962ac59075b964b07152d234b70 |
| 5 | root | 0c51f0ba4316a5c844397f69effe2d01 |
+----+----------+----------------------------------+
mysql> SELECT * FROM user;
+----+----------+----------------------------------+
| id | username | password |
+----+----------+----------------------------------+
| 1 | 123 | d41d8cd98f00b204e9800998ecf8427e |
| 2 | 123 | 5e12a8f9c9e959060fdcaea165393039 |
| 3 | | d41d8cd98f00b204e9800998ecf8427e |
| 4 | root | 202cb962ac59075b964b07152d234b70 |
| 5 | root | 0c51f0ba4316a5c844397f69effe2d01 |
+----+----------+----------------------------------+
相同是一个单向加密算法,无法由密文间接获得明文密码(和MD5一样);
Crypt()加密算法
【bf88必发唯一官网】PHP内置加密函数详解,PHP加密技术。
语法: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$');
}
语法: string crypt(string $str[, string $salt]) , 再次回到一个基于标准UNIX
DES算法或种类上别样可用的代表算法的三列字符串
基本没什么要说的,就一些,crypt的加密有不一致的加密算法,默许的是MD5加密,可是一旦不给定“盐值”,每一趟刷新,都是不相同的结果;
$str: 需求加密的公然
下一场可以指定盐值,具体参见手册,每个算法的盐值长度是不雷同的,比如上述的DES和MD5,结果如下
$salt: 加密时的苦恼串,是编码更安全
二、Crypt加密算法
二、Crypt加密算法
1223b8c30a347321299611f873b449ad
$1$ed0.Ph..$fPbfhSOMLyNdtZn9krT8X/
im37cLeO/JPaQ
th12A1V7QCns.
$1$this is $Bu9FE8Y8oGnIbftjDA4ez0
小心: 即使加密时并未拉长这一个$salt参数, 将随机生成一个干扰串,
否则刷新加密秘文不变
同一是一个单向加密算法,不能由密文直接拿走明文密码(和MD5一样);
一如既往是一个单向加密算法,不能由密文直接获得明文密码(和MD5一样);
DES只可以取两位,而MD5取了8位;
算法常量:
语法:string crypt(string $str[,string
$salt]),$str为加密公开,$salt为烦扰项,可以精通为椒盐噪声;
语法:string crypt(string $str[,string
$salt]),$str为加密公然,$salt为困扰项,可以领略为椒盐噪声;
用法上也大半,记得输入盐值才好。
[CRYPT_SALT_LENGTH]
/**
* 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
*/
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$');
}
【bf88必发唯一官网】PHP内置加密函数详解,PHP加密技术。三、Sha1
默许的加密长度。使用专业的 DES 加密,长度为 2
同样是单向加密,不可破解(但网上的法子都是近似数据库一样的“伪暴力”破解);
[CRYPT_STD_DES]
骨干没什么要说的,就一些,crypt的加密有例外的加密算法,默许的是MD5加密,可是假使不给定“盐值”,每一趟刷新,都是不一样的结果;
基本没什么要说的,就一些,crypt的加密有两样的加密算法,默认的是MD5加密,不过一旦不给定“盐值”,每一次刷新,都是分歧的结果;
与MD5的界别在于再次来到更长的(40位)16进制的数串(MD5是32位);
据悉专业 DES 算法的散列使用 “./0-9A-Za-z”
字符中的多个字符作为盐值。在盐值中应用地下的字符将招致 crypt() 败北。
下一场可以指定盐值,具体参见手册,每个算法的盐值长度是不平等的,比如上述的DES和MD5,结果如下
然后可以指定盐值,具体参见手册,每个算法的盐值长度是不等同的,比如上述的DES和MD5,结果如下
/**
* Sha1
*/
echo "<hr/>";
echo sha1('shit');
echo "<hr/>";
echo sha1('shit',true);
echo "<hr/>";
echo sha1('admin');
[CRYPT_EXT_DES]
1 1223b8c30a347321299611f873b449ad
2 $1$ed0.Ph..$fPbfhSOMLyNdtZn9krT8X/
3 im37cLeO/JPaQ
4 th12A1V7QCns.
5 $1$this is $Bu9FE8Y8oGnIbftjDA4ez0
1 1223b8c30a347321299611f873b449ad
2 $1$ed0.Ph..$fPbfhSOMLyNdtZn9krT8X/
3 im37cLeO/JPaQ
4 th12A1V7QCns.
5 $1$this is $Bu9FE8Y8oGnIbftjDA4ez0
之所以,一般加密保存,不要独立选用那几个密码,不如那样子混合使用:
推而广之的根据 DES 算法的散列。其盐值为 9 个字符的字符串,由 1
个下划线后边随着 4 字节循环次数和 4
字节盐值组成。它们被编码成可打印字符,每个字符 6 位,有效位最少的先行。0
到 63 被编码为 “./0-9A-Za-z”。在盐值中行使不合规的字符将促成 crypt()
败北。
echo "<hr/>";
echo sha1(sha1('admin',true));
echo "<hr/>";
echo sha1(md5('admin'));
[CRYPT_MD5]
DES只能取两位,而MD5取了8位;
DES只能够取两位,而MD5取了8位;
相当于是加密外围又自行开展了简便的加密!!
MD5 散列使用一个以 $1$ 初步的 12 字符的字符串盐值。
用法上也大半,记得输入盐值才好。
用法上也基本上,记得输入盐值才好。
四、URL编码加密
[CRYPT_BLOWFISH]
对地方栏音讯举行加密;
Blowfish 算法使用如下盐值:“$2a$”,一个两位 cost 参数,“$” 以及 64 位由
“./0-9A-Za-z”
中的字符组合而成的字符串。在盐值中采纳此限制之外的字符将导致 crypt()
再次回到一个空字符串。两位 cost 参数是循环次数以 2 为底的对数,它的限量是
04-31,超出那个范围将造成 crypt() 败北。
双向,urlencode和urldecode;
CRYPT_SHA256
三、Sha1
三、Sha1
/**
* 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编码
SHA-256 算法使用一个以 $5$ 初叶的 16
字符字符串盐值举行散列。假如盐值字符串以 “rounds=<N>$” 起首,N
的数字值将被用来指定散列循环的举办次数,那一点很像 Blowfish 算法的 cost
参数。默许的大循环次数是 5000,最小是 1000,最大是
999,999,999。超出这几个界定的 N 将会被更换为最相仿的值。
同样是单向加密,不可破解(但网上的不二法门都是近乎数据库一样的“伪暴力”破解);
同样是单向加密,不可破解(但网上的点子都是近似数据库一样的“伪暴力”破解);
结果如下
CRYPT_SHA512
与MD5的界别在于重返更长的(40位)16进制的数串(MD5是32位);
与MD5的界别在于再次回到更长的(40位)16进制的数串(MD5是32位);
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 )
SHA-512 算法使用一个以 $6$ 初始的 16
字符字符串盐值举办散列。倘诺盐值字符串以 “rounds=<N>$” 起初,N
的数字值将被用来指定散列循环的施行次数,那一点很像 Blowfish 算法的 cost
参数。默许的大循环次数是 5000,最小是 1000,最大是
999,999,999。超出那么些范围的 N 将会被转换为最相仿的值。
/**
* Sha1
*/
echo "<hr/>";
echo sha1('shit');
echo "<hr/>";
echo sha1('shit',true);
echo "<hr/>";
echo sha1('admin');
/**
* Sha1
*/
echo "<hr/>";
echo sha1('shit');
echo "<hr/>";
echo sha1('shit',true);
echo "<hr/>";
echo sha1('admin');
所以效能就是:地址栏越发安全,不再明文传输,另一个缓解杰出情形的传递
例:
五、Base64编码加密
if(CRYPT_MD5){
echo "MD5加密:".crypt('something','$1$somethin$');
}
因而,一般加密保存,不要单独行使那些密码,不如那样子错落使用:
于是,一般加密保存,不要独自使用那个密码,不如那样子掺杂使用:
实在base64不是加密技术,只可是他会对data进行base64的编码,也得以看作是一种加密技术;
Sha1()加密算法
echo "<hr/>";
echo sha1(sha1('admin',true));
echo "<hr/>";
echo sha1(md5('admin'));
echo "<hr/>";
echo sha1(sha1('admin',true));
echo "<hr/>";
echo sha1(md5('admin'));
/**
* 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);
办法: 单向加密
等于说是对情节开展加密;
语法: string sha1(string $str [, bool $raw_output=false])
计算字符串的sha1散列值
等于是加密外面又自动开展了简单的加密!!
对等是加密外面又自动进行了简易的加密!!
总结
$str: 加密的字符串
单项散列加密:获得稳定长度的输出,是单向的;
$raw_output: 即使可选的raw_output参数被设置为TRUE,
那么sha1摘要将以20字符长度的原始格式重返,
否则重回值是一个40字符串长度的十六进制数字.
四、URL编码加密
四、URL编码加密
对称散列加密:使用同一把密钥举行加密解密,可以并行推算;(算法不难,功能高,开支小,适合对大量多少开展加密)DES等
URL编码加密技术
对地方栏信息举办加密;
对地点栏音讯举办加密;
非对称加密技术:密钥不雷同,公钥和私钥之分
编码URL字符串: urlencode(string $str)
双向,urlencode和urldecode;
双向,urlencode和urldecode;
如上那篇PHP加密技术的简便已毕就是作者分享给我们的全体内容了,希望能给我们一个参阅,也指望我们多多扶助脚本之家。
解码已编码的URL字符串: urldeocde(string $str)
/**
* 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编码
/**
* 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编码
你或许感兴趣的文章:
- PHP 加密与解密的努力
- 一个PHP针对数字的加密解密类
- PHP的加密方法及原理
- PHP完成加密的二种方法介绍
编码规范:
此字符串中除了-_.之外的拥有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,
空格则编码为加号(+)
按部就班RFC1738对URL进行编码: rawurlencode(string $str) :
再次来到从字符串,把空格编码为%20
结果如下
结果如下
对已编码的字符串进行解码: rawurldecode(string $str) : 再次来到字符串,
此字符串中百分号%后跟两位十六进制的体系豆将被替换成原义字符
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 )
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 )
urlencode和rawurlencode的差异只在乎空格.
所以职能就是:地址栏尤其安全,不再明文传输,另一个解决卓越意况的传递
所以效益就是:地址栏越发安全,不再明文传输,另一个化解特殊处境的传递
Base64编码加密技术
行使base64对data进行编码: base64_encode(string $data)
对使用MIME base64编码的多寡举行解码: base64_decode(string $data[,
$strict=false]) ;
$strict:假使输入的数目超出了base64的字母表,则赶回false.
base64编码的图片还足以平昔放在<img>标签中显得:
<img src=”data:image/jpeg;base64,编码字符串” alt=””/>
五、Base64编码加密
五、Base64编码加密
<img src=”data:;base64,编码字符串” alt=””/>
实际base64不是加密技术,只不过他会对data举办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);
/**
* 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);
1 单项散列加密:
指通过分化输入的长度的音讯进行散列总计, 获得稳定长度的输出,
那个散列总计进度是单向的,
既不可能对一定长度的输出举办统计从而活儿输出音讯.
等于说是对情节展开加密;
等于说是对情节展开加密;
2 对称散列加密
指加密和平解决密的密匙是同一个密匙或者可以互相推算.
3 非对称散列加密
非对称加密和平解决密的密匙不是同一个密匙, 其中一个对曾祖父开, 被称作公钥,
另一个唯有所有者知道.
总结
总结
您或许感兴趣的作品:
- VBScript版的PHP
extract()函数 - PHP中extract()函数的定义和用法
- PHP中extract()函数的妙用分析
- PHP extract
将数组拆分成多个变量的函数 - PHP中的extract的成效分析
- php的socket编程详解
- php PDO十分处理详解
- php.ini中date.timezone设置详解
- 浅析php中array_map和array_walk的使用比较
- php
二维数组时间排序实现代码 - php socket通讯不难已毕
- php
数组处理函数extract详解及实例代码
单项散列加密:得到一定长度的输出,是单向的;
单项散列加密:得到一定长度的输出,是单向的;
对称散列加密:使用同一把密钥进行加密解密,可以相互推算;(算法简单,效能高,开销小,适合对大气数码进行加密)DES等
对称散列加密:使用相同把密钥举办加密解密,可以并行推算;(算法简单,效能高,开销小,适合对大气数额开展加密)DES等
非对称加密技术:密钥不等同,公钥和私钥之分
非对称加密技术:密钥不均等,公钥和私钥之分
相关文章
- curl模拟登陆带验证码的网址,附调用艺术
- AdvStringGrid使用本事,AdvStringGrid使用小结
- python函数暗中认可参数成效域,Python入门笔记02
- PHP浮点数运算精度造成的,浮点数比较艺术详解
- Python程序中安装HTTP代理,https代理的实例解说
- 【bf88必发唯一官网】php无刷新回贴和注册查证实例,ajax验证用户名完成代码
- python基本常识,Python基础入门笔记
- 20180803UnionPay银联支付,接入银联支付
- Nginx下ThinkPHP5的布局方式详解,TinkPHP5安顿Nginx服务器难题
- 【bf88必发唯一官网】php学习日志,HttpRequestHelper的档次开头值设定发生更加