PHP加密技术,PHP内置加密函数详解

 

 

一、MD5加密

Md5()加密算法

一、MD5加密

一、MD5加密

直接干,那里以一个记名页面为例:

方法: 单向加密

一贯干,那里以一个记名页面为例:

一向干,那里以1个报到页面为例:

<?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字节长度的原来二进制格式重临.
再次来到以3一个人字符十六进制数字方式再次来到散列值

重庆大学正是记念比对的时候也运用MD5,所以存在数据库中的时候就是密码保存的了

重在正是纪念比对的时候也选用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 |
+----+----------+----------------------------------+

平等是3个单向加密算法,不能够由密文直接获取明文密码(和MD5一样);

Crypt()加密算法

 

 

语法: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]) , 重临3个遵照标准UNIX
DES算法或系统上别样可用的替代算法的三列字符串



主导没什么要说的,就一些,crypt的加密有例外的加密算法,暗中同意的是MD5加密,然则一旦不给定“盐值”,每一遍刷新,都以不雷同的结果;

$str: 需求加密的公开

  

  

然后能够钦赐盐值,具体参见手册,每一个算法的盐值长度是分裂的,比如上述的DES和MD5,结果如下

$salt: 加密时的干扰串,是编码更安全

二 、Crypt加密算法

② 、Crypt加密算法

1223b8c30a347321299611f873b449ad
$1$ed0.Ph..$fPbfhSOMLyNdtZn9krT8X/
im37cLeO/JPaQ
th12A1V7QCns.
$1$this is $Bu9FE8Y8oGnIbftjDA4ez0

在意: 假设加密风尚未添加这几个$salt参数, 将轻易生成三个苦恼串,
不然刷新加密秘文不变

一如既往是叁个单向加密算法,不能够由密文直接拿走明文密码(和MD5一样);

一律是3个单向加密算法,非常小概由密文直接获取明文密码(和MD5一样);

DES只好取两位,而MD5取了七个人;

算法常量:

语法:string crypt(string $str[,string
$salt])
,$str为加密公开,$salt为苦恼项,能够知道为椒盐噪声;

语法:美高梅开户网址,string crypt(string $str[PHP加密技术,PHP内置加密函数详解。,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$');
}

三、Sha1

暗中同意的加密长度。使用正规的 DES 加密,长度为 2

 

 

同样是单向加密,不可破解(但网上的方式都是接近数据库一样的“伪暴力”破解);

[CRYPT_STD_DES]

着力没什么要说的,就一些,crypt的加密有例外的加密算法,暗中同意的是MD5加密,但是假使不给定“盐值”,每便刷新,都以差异的结果;

核心没什么要说的,就一些,crypt的加密有两样的加密算法,默许的是MD5加密,然则只要不给定“盐值”,每趟刷新,都是分裂的结果;

与MD5的界别在于重回更长的(四十几人)16进制的数串(MD5是33人);

依据专业 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 个字符的字符串,由 3个下划线后边随着 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取了6个人;

DES只可以取两位,而MD5取了6个人;

卓殊是加密外围又自行开展了简便的加密!!

MD5 散列使用三个以 $1$ 伊始的 12 字符的字符串盐值。

用法上也大半,记得输入盐值才好。

用法上也基本上,记得输入盐值才好。

④ 、U中华VL编码加密

[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
参数。暗许的轮回次数是 6000,最小是 一千,最大是
999,999,999。超出那一个限制的 N 将会被更换为最接近的值。

同样是单向加密,不可破解(但网上的方法都以接近数据库一样的“伪暴力”破解);

同样是单向加密,不可破解(但网上的法门都以相近数据库一样的“伪暴力”破解);

结果如下

CRYPT_SHA512

与MD5的界别在于再次回到更长的(四十多少人)16进制的数串(MD5是3二人);

与MD5的区分在于再次回到更长的(四十一位)16进制的数串(MD5是三十个人);

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
参数。私下认可的巡回次数是 四千,最小是 一千,最大是
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');

所以效率就是:地址栏越发安全,不再明文字传递输,另3个缓解特殊意况的传递

例:

 

 

⑤ 、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散列值

12分是加密外面又自动举行了简便的加密!!

也正是是加密外围又自行开始展览了大约的加密!!

总结

$str: 加密的字符串



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

$raw_output: 假如可选的raw_output参数被设置为TRUE,
那么sha1摘要将以20字符长度的原始格式重返,
不然重回值是一个40字符串长度的十六进制数字.

④ 、U本田CR-VL编码加密

④ 、U哈弗L编码加密

对称散列加密:使用同一把密钥举行加密解密,能够并行推算;(算法不难,效能高,开销小,适合对大气数据举行加密)DES等

U凯雷德L编码加密技术

对地点栏音讯举办加密;

对地方栏新闻举办加密;

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

编码URL字符串: urlencode(string $str)

双向,urlencode和urldecode;

双向,urlencode和urldecode;

以上那篇PHP加密技术的大致实现正是作者分享给我们的全体内容了,希望能给大家1个参考,也愿意我们多多支持脚本之家。

解码已编码的UOdysseyL字符串: 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实现加密的二种方法介绍

编码规范:
此字符串中除去-_.之外的具备非字母数字字符都将被轮换到都百货分号(%)后跟两位十六进制数,
空格则编码为加号(+)

 

 

依照锐界FC1738对USportageL进行编码: 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的区分只在乎空格.

  
所以职能正是:地址栏特别安全,不再明文字传递输,另3个消除卓越意况的传递

  
所以功用就是:地址栏特别安全,不再明文字传递输,另多少个缓解杰出情况的传递

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 非对称散列加密

 

 

非对称加密和解密的密匙不是同1个密匙, 在那之中一个对伯公开, 被称作公钥,
另一个只有全体者知道.

总结

总结

你只怕感兴趣的篇章:

  • 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等

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

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

 

 

      

      

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                                                                       
                                                                       
                                                                       
                           

                                                                       
                                                                       
                                                                       
                           

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图