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 '用户名可用';
        }
    }
  • 相关阅读:
    对于匿名对象,内部类这块的理解
    final等关键字和代码块
    构造方法
    接口与多态的总结
    关于折半法查找的一些总结以及ArrayList类的总结
    关于冒泡法的总结(主要是格式问题了)
    java读取properties文件的几种方式(转载)
    JAVA导出EXCEL表格(转载)
    map遍历的四种方法
    Java集合源码分析(四)HashMap
  • 原文地址:https://www.cnblogs.com/chenyingying0/p/12895947.html
Copyright © 2011-2022 走看看