摘要:在PHP中能对数据进行加密的函数主要有:crypt()、md5()以及sha1(),还有就是加密扩展库Mcrpyt和Mash。crypt()函数可以完成单向加密功能,是单向字符串散列!crypt()函数是单向加密的,密文不可还原成明文的,而且每次加密后的数据都是不同的,这就是salt参数要解决的问题了。crypt()函数用salt参数对明文进行加密,判断时,对输出的信息再次使用相同的salt参数进行加密,对比两次加密后的结果来进行判断!
在介绍加密函数之前,我们先来介绍一下数据加密原理:就是对原来的明文件或者数据按照某种算法进行处理,使其成为不可读的一段代码,通常称之为“密文”,通过这样的途径来达到保护数据不被非法窃取和阅读的目的!
在PHP中能对数据进行加密的函数主要有:crypt()、md5()以及sha1(),还有就是加密扩展库Mcrpyt和Mash。在这篇文章中,我们先介绍使用crpyt()函数进行加密!
crypt()函数可以完成单向加密功能,是单向字符串散列!大理石平台维修
crypt()函数语法格式如下:
1 | string crypt ( string $str [, string $salt ] )
|
算法 | salt长度 |
CRYPT_STD_DES | 2-character(默认) |
CRYPT_EXT_DES | 9-character |
CRYPT_MD5 | 12-character(以$1$开头) |
CRYPT_BLOWFISH | 16-character(以$2$开头) |
这里要说明一下:
在默认的情况下,PHP使用一个或者两个字符的 DES 干扰串,如果系统使用的是MD5,那么就会使用 12个字符,可以通过 CRYPT_SALT_LENGTH 变量来查看当前所使用的干扰串的长度!
crypt()函数实例用法:
下面我们使用一个实例,让大家一目了然,具体代码如下:
1 2 3 4 5 6 7 | <?php
header( "Content-Type:text/html; charset=utf-8" );
$atr = "php中文网 www.php.cn" ; //声明字符串变量$atr
echo "加密之前atr的值为:" . $atr ;
$atr1 = crypt( $atr ); //对变量$str 加密
echo "<br>加密之后str的值为:" . $atr1 ; //输出加密后的变量
?>
|
输出的结果如下:
上面的实例执行之后,一直刷新浏览器,你会发现每次生成的加密结果都是不一样的,那么该如何进行对加密后的数据进行判断就成了问题。crypt()函数是单向加密的,密文不可还原成明文的,而且每次加密后的数据都是不同的,这就是 salt 参数要解决的问题了。
crypt()函数用 salt参数对明文进行加密,判断时,对输出的信息再次使用相同的 salt 参数进行加密,对比两次加密后的结果来进行判断!
下面的实例对输入用户名进行检查,具体代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?php
header( "Content-Type:text/html; charset=utf-8" );
$link =mysqli_connect( "localhost" , "root" , "" );
$db_selected = mysqli_select_db( $link , "my_db" );
?>
<form name= "form1" action= "" method= "post" >
<input type= "text" name= "username" id= "username" size= "15" >
<input type= "submit" name= "Submit" value= "检测" >
</form>
<?php
if (isset( $_POST [ "username" ])!= "" ){
$usr =crypt(isset( $_POST [ "username" ]), "tm" ); //对用户名进行加密
$sql = "select * from tb_user where user = '" . $usr . "'" ; //生成查询语句
$rst = mysqli_query( $link , $sql ); //执行语句,返回结果集
if ( $rst ){
echo "用户名存在" ;
} else {
echo "用户名可以使用" ;
}
}
?>
|