zoukankan      html  css  js  c++  java
  • PHP 加密和解密

    计应134(实验班) 郑寿奎

    一、crypt()函数单向加密

            语法格式:

                     String crypt(string str[, string salt]);

              参数str是需要加密的值,salt是干扰串,如果把salt省略就会随机生成一个干扰串

             设置干扰串和不设置干扰串的区别:

               设置干扰串之后的值是一直不会变的

               不设置干扰串之后的值是随机的,每一次都不一样

           代码如下:

    <?php
    $str="这是个值";
    echo '加密前的值:'.$str."<br>";
    $jiami=crypt($str);
    echo '没有干扰串加密后的值:'.$jiami."<br>";
    $jia=crypt($str,"ab");
    echo '添加干扰串"ab"加密后的值:'.$jia."<br>";
    ?>

    第一次运行结果如下图:

    第二次运行结果如下图:

           crypt()函数加密是单向加密的,如果不加干扰串,那么每次加密的结果都是不一样的,但是加了干扰串之后可以发现,每次的值都是一样的。

           所以对加密后的数据进行判断就需要在加密之前加上干扰串         

    二、md5()函数加密

             语法格式:

                     string md5(string str[, bool raw_output]);

            参数str是需要加密的数据,raw_output的值是true和false,默认为false,如果为true的是后,那么函数就会返回一个二进制形式的密文

             md5()函数加密的密文是一直不会变的

    代码:

    <?php
    $str="这是个值";
    echo '加密前的值:'.$str."<br>";
    $jiami=md5($str);
    echo '默认加密后的值:'.$jiami."<br>";
    $jiami=md5($str,true);
    echo 'true加密后的值:'.$jiami."<br>";
    ?>

    运行结果如下图:

    三、sha1()函数加密

               语法格式:

                       string sha1(string str[, bool raw_output]);

                参数str是需要加密的数据,raw_output默认false,函数返回一个40位的十六进制数,true 返回20的二进制数

               sha1()函数加密后的密文是不会变的

    代码:

    <?php
    $str="这是个值";
    echo '加密前的值:'.$str."<br>";
    $jiami=sha1($str);
    echo '默认加密后的值:'.$jiami."<br>";
    $jiami=sha1($str,true);
    echo 'true加密后的值:'.$jiami."<br>";
    ?>

    运行结果如下图:

    四、加密和解密

    代码:

    <?php
    //加密
    function encode($string = '', $skey = 'cxphp') {
        $strArr = str_split(base64_encode($string));
        $strCount = count($strArr);
        foreach (str_split($skey) as $key => $value)
            $key < $strCount && $strArr[$key].=$value;
        return str_replace(array('=', '+', '/'), array('O0O0O', 'o000o', 'oo00o'), join('', $strArr));
     }
    
    //解密
    function decode($string = '', $skey = 'cxphp') {
        $strArr = str_split(str_replace(array('O0O0O', 'o000o', 'oo00o'), array('=', '+', '/'), $string), 2);
        $strCount = count($strArr);
        foreach (str_split($skey) as $key => $value)
            $key <= $strCount  && isset($strArr[$key]) && $strArr[$key][1] === $value && $strArr[$key] = $strArr[$key][0];
        return base64_decode(join('', $strArr));
     }
    
    
    $str = '四大古典风格';
    echo "string : " . $str . " <br />";
    echo "encode : " . ($enstring = encode($str)) . '<br />';
    echo "decode : " . decode($enstring);
    ?>

    运行结果如下图:

  • 相关阅读:
    随笔2
    随笔
    关于updateElement接口
    随笔1
    本地访问正常,服务器访问乱码 记录
    Redis (error) NOAUTH Authentication required.解决方法
    tomcat启动很慢 停留在 At least one JAR was scanned for TLDs yet contained no TLDs.
    微信公众号消息回复
    微信公众号 报token验证失败
    idea中web.xml报错 Servlet should have a mapping
  • 原文地址:https://www.cnblogs.com/ZSK991656110/p/4987773.html
Copyright © 2011-2022 走看看