zoukankan      html  css  js  c++  java
  • PHP三个常用的加密函数

    PHP加密函数—md5()函数加密实例用法

    MD5()函数是计算器字符串的 MD5散列值,使用MD5的算法,MD5的全称是Message-Digest Algorithm 5,它的作用是把不同长度的数据信息经过一系列的算法计算成一个 128 位的数值,就是把一个任意长度的字节串变成一定长的大整数。注意这里说的是“字节串”,而不是“字符串”,因为这种变换只与字节的值有关系,与字符集或者编码方式并无关。

    第二个参数如果设置为true,那么函数就会返回一个二进制形式的密文,该参数默认为 false。

    在很多的网站中,注册用户名的密码都是使用 MD5加密,然后再保存到数据库的,用户名登录的时候,程序把用户输入的密码算成MD5值,然后再去和数据库中保存的MD5值进行比较,在这个过程中呢,程序自身都不会“知道”用户的真实密码,从而保证了注册用户的个人隐私,提高了安全性。

    下面实例实现注册和登录的功能,通过MD5加密后,保存数据库,具体步骤如下:

    第一步:创建conn.php文件,完成与数据库的链接:

    <?php
    header("Content-Type:text/html;charset=utf-8");
    
    $conn = mysqli_connect('localhost','root','123456') or die('数据库连接失败'.mysqli_error());
    mysqli_select_db($conn,'tp5');
    mysqli_query($conn,'set name utf-8');

    第二步:就是创建register.php文件,模拟获取到表单中的数据,通过MD5()函数对密码进行加密,使用面向对象的方法完成,参考代码如下:

    <?php
    header("Content-Type:text/html;charset=utf-8");
    
    class CHECKUSER{
        var $name;
        var $pwd;
    
        function __construct($x,$y){
            $this->name = $x;
            $this->pwd = $y;
        }
    
        function checkinput(){
            include 'conn.php';
            $info = mysqli_query($conn,'insert into user(username,password) value("'.$this->name.'","'.md5($this->pwd).'")');
    
            if($info == false){
                echo "<script>alert('会员注册失败');history.back();</script>";
                exit();
            }else{
                $_SESSION['admin_name'] = $this->name;
                echo "<script>alert('会员注册成功');window.location.href='demo.php';</script>";
            }
        }
    }
    
    $_POST['name'] = 'cyy2';
    $_POST['password'] = '123';
    $obj = new CHECKUSER(trim($_POST['name']),trim($_POST['password']));
    $obj->checkinput();

    完成以后可以在数据库查看加密过后的密码!

    PHP加密函数—sha1()函数加密的实例用法

    sha的全称是:Secure Hash Algorithm(安全哈希算法)主要适用于数字签名标准 (Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。PHP提供的sha1()函数使用的就是SHA 算法!

    函数返回一个 40位的十六进制数,如果参数 raw_output 为 true,那么就会返回一个 20位的二进制数,默认是 raw_output 是为 false。

    在这里要着重的说明下:

    sha后面的 1 是阿拉伯数字(123456)里的 1 ,不是字母l(L),很多人都会看成是字母,但是它是阿拉伯数字,这里大家一定要注意,不要搞错了!

    <?php
    header("Content-Type:text/html;charset=utf-8");
    
    $str = 'cyy';
    echo 'true--原始20字符二进制格式:'.sha1($str,TRUE).'<br>';
    echo 'false--40字符十六进制格式:'.sha1($str).'<br>';

    输出结果为:

    下面实例是输出 sha1() 的结果并对其进行测试:

    <?php
    header("Content-Type:text/html;charset=utf-8");
    
    $str = 'cyy';
    echo 'false--40字符十六进制格式:'.sha1($str).'<br>';
    if(sha1($str) == 'f1ff58f24616c02df26e8d8393887364bfb4b486'){
        echo 'i love cyy';
        exit;
    }

    输出结果为:

    下面实例是MD5 和SHA 加密运算对比,具体带代码如下

    <?php
    header("Content-Type:text/html;charset=utf-8");
    
    $str = 'cyy';
    echo 'sha1:'.sha1($str).'<br>';
    echo 'md5:'.md5($str).'<br>';

    输出结果为:

    PHP加密函数—crypt()函数加密用法实例

    数据加密原理:就是对原来的明文件或者数据按照某种算法进行处理,使其成为不可读的一段代码,通常称之为“密文”,通过这样的途径来达到保护数据不被非法窃取和阅读的目的!

    在PHP中能对数据进行加密的函数主要有:crypt()、md5()以及sha1(),还有就是加密扩展库Mcrpyt和Mash。

    crypt()函数可以完成单向加密功能,是单向字符串散列

    在默认的情况下,PHP使用一个或者两个字符的 DES 干扰串,如果系统使用的是MD5,那么就会使用 12个字符,可以通过 CRYPT_SALT_LENGTH 变量来查看当前所使用的干扰串的长度!

    <?php
    header("Content-Type:text/html;charset=utf-8");
    
    $str = 'cyy';
    echo '加密前:'.$str.'<br>';
    echo '加密后:'.crypt($str).'<br>';

    输出的结果如下:

    上面的实例执行之后,一直刷新浏览器,你会发现每次生成的加密结果都是不一样的,那么该如何进行对加密后的数据进行判断就成了问题。crypt()函数是单向加密的,密文不可还原成明文的,而且每次加密后的数据都是不同的,这就是 salt 参数要解决的问题了。

    crypt()函数用 salt参数对明文进行加密,判断时,对输出的信息再次使用相同的 salt 参数进行加密,对比两次加密后的结果来进行判断!

    下面的实例对输入用户名进行检查,具体代码如下:

    <?php
    header("Content-Type:text/html;charset=utf-8");
    
    include 'conn.php';
    ?>
    
    <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']) != ''){
        $user = crypt(isset($_POST['username']),'cyy');
        $sql = "select * from user where username = '".$user."'";
        $res = mysqli_query($conn,$sql);
        if($res){
            echo '用户名已存在';
        }else{
            echo '用户名可用';
        }
    }
  • 相关阅读:
    Windows Azure Storage (17) Azure Storage读取访问地域冗余(Read Access – Geo Redundant Storage, RA-GRS)
    SQL Azure (15) SQL Azure 新的规格
    Azure China (5) 管理Azure China Powershell
    Azure China (4) 管理Azure China Storage Account
    Azure China (3) 使用Visual Studio 2013证书发布Cloud Service至Azure China
    Azure China (2) Azure China管理界面初探
    Azure China (1) Azure公有云落地中国
    SQL Azure (14) 将云端SQL Azure中的数据库备份到本地SQL Server
    [New Portal]Windows Azure Virtual Machine (23) 使用Storage Space,提高Virtual Machine磁盘的IOPS
    Android数据库升级、降级、创建(onCreate() onUpgrade() onDowngrade())的注意点
  • 原文地址:https://www.cnblogs.com/chenyingying0/p/12895947.html
Copyright © 2011-2022 走看看