精华内容
下载资源
问答
  • PHP加密解密

    千次阅读 2008-11-10 17:43:00
    最近学习URL跳转的时候新进三个超好用的PHP加密解密函数,貌似是discuz里的…使用这些加密解密的原因是因为有时自己的URL地址被人获取以后想破解你里面传值的内容就必须知道你的key,没有key,他应该要破了一阵子才能...
     
    

    最近学习URL跳转的时候新进三个超好用的PHP加密解密函数,貌似是discuz里的…使用这些加密解密的原因是因为有时自己的URL地址被人获取以后想破解你里面传值的内容就必须知道你的key,没有key,他应该要破了一阵子才能知道你URL里面的内容吧...
    闲话少说,先将它们打包成一个文件就叫fun.php吧
    <?php
    function passport_encrypt($txt, $key) {
    srand((double)microtime() * 1000000);
    $encrypt_key = md5(rand(0, 32000));
    $ctr = 0;
    $tmp = '';
    for($i = 0;$i < strlen($txt); $i++) {
       $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
       $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
    }
    return base64_encode(passport_key($tmp, $key));
    }

    function passport_decrypt($txt, $key) {
    $txt = passport_key(base64_decode($txt), $key);
    $tmp = '';
    for($i = 0;$i < strlen($txt); $i++) {
       $md5 = $txt[$i];
       $tmp .= $txt[++$i] ^ $md5;
    }
    return $tmp;
    }

    function passport_key($txt, $encrypt_key) {
    $encrypt_key = md5($encrypt_key);
    $ctr = 0;
    $tmp = '';
    for($i = 0; $i < strlen($txt); $i++) {
       $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;
       $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
    }
    return $tmp;
    }
    ?>
    以下是一些示例…加深对这三个加密解密函数的理解…
    //string.php
    <?php
    include “fun.php”;

    $txt = “This is a test”;
    $key = “testkey”;
    $encrypt = passport_encrypt($txt,$key);
    $decrypt = passport_decrypt($encrypt,$key);

    echo $txt.”<br><hr>”;
    echo $encrypt.”<br><hr>”;
    echo $decrypt.”<br><hr>”;
    ?>
    //array.php
    <?php
    include “fun.php”;

    $array = array(
    "a" => "1",
    "b" => "2",
    "c" => "3",
    "d" => "4"
    );
    //serialize产生一个可存储的值,返回一个字符串,unserialize还原
    $txt = serialize($array);
    $key = “testkey”;
    $encrypt = passport_encrypt($txt,$key);
    $decrypt = passport_decrypt($encrypt,$key);
    $decryptArray = unserialize($decrypt);

    echo $txt.”<br><hr>”;
    echo $encrypt.”<br><hr>”;
    echo $decrypt.”<br><hr>”;
    echo $decryptArray.”<br><hr>”;
    ?>
    关键的地方来了…当你要跳转到另外一个网址,但又要保证你的session无误的时候,你需要对session作一个处理.貌似一个公司有一个网站又有一个论坛,两个地方都有注册和登录,但又不想让用户在主页登录后跳转到论坛的时候session失效,即是登录一次跑完整间公司…
    那要怎样来处理用户的session呢…
    网页都是无状态的,如果要在新的网页中继续使用session,则需要把session从一个地方移到另一个地方,可能有些人已经想到了,我可以通过url传址的方式来调用它….而PHP有个处理session的变量,叫$_SESSION.于是….
    将需要注册的session转换成一个数组吧.那么,你可以这样写:
    //login.php
    <?php
    session_start();
    include “fun.php”;
    ….
    $_SESSION[“userid”];
    $_SESSION[“username”];
    $_SESSION[“userpwd”];

    header("Location: http://$domain/process.php?s=".urlencode(passport_encrypt(serialize($_SESSION),"sessionkey")));
    ?>
    上例中先用serialize将$_SESSION变成可存储的数据,然后通过passport_encrypt将这个数据加密,加urlencode的原因是因为$_SESSION加密时,有可能会产生像料想不到的编码,所以以防万一…(事实证明非常有效)
    处理下先
    //process.php
    <?php
    session_start();
    include “fun.php”;
        $_SESSION=unserialize(passport_decrypt($_GET["s"],"sessionkey"));
        header("Location: http://$domain/index.php");
    ?>
    先用$_GET[“s”]获取URL的参数,然后用passport_decrypt将其解密,再用unserialize将其数据还原成原始数据
    到了这步处理,你的网页就可能通过header自由跳转啦….
    这种方法还涉及到安全性的问题,如果你的url地址在传址的过程中被人家获取的话,那就真的是不好意思了…人家虽然可能破解不了url里边的内容,但人家也可以直接用这个url地址来登录你的一些个人账户啊,邮箱帐户啊甚至银行帐户(当然很少人会这样写,我例外,哈哈)…听起来好怕….但其实你可以在跳转页面作取消session处理….
    以下是加强版的process.php
    <?php
            session_start();
            include_once "fun.php";
            $_SESSION=unserialize(passport_decrypt($_GET["s"],"sessionkey"));
            if((time()-$_SESSION["TIME"])>30){
                    header("Location: http://$domain/ login.php");
                    unset($_SESSION["USERNAME"]);
                    unset($_SESSION["PASSWORD"]);
            }
            else
            header("Location: http://$domain/ index.php");
    ?>
    写这个文件之前,你还要在登录那边设置
    $_SESSION["TIME"] = time();
    设置这个的原因主要是获取两边的时间,如果跳转的时候超过30秒的时候,你就可以让它跳转到login.php登录页面,网速慢的客户就不好意思啦…但这也预防了如果此url被人获取,而这个人又没有在30秒内登录的话,那就不好意思啊,超时重新登录.
    $_SESSION["USERNAME"]和$_SESSION["PASSWORD"] 这两个东东就是用户登录时需要输入的用户名和密码了….取消这两个session的原因就是因为如果你的url被人获取了,那个人虽然在超过30秒内跳转到loign.php的页面,但那些传过来的session依然有效,只要将url后缀login.php改为index.php….那他一样登录成功…
    感觉废话说了一大堆…不知让不让人明白一点...明白的就快去实践一下…

    展开全文
  • php加解密

    万次阅读 2018-02-20 14:48:09
    一 对称加密 1.mycyrpt的对称加密: ... * @param $string //需要进行加解密的字符串 string * @param $decrypt //加密还是解密 (最简单的,0代表加密,1代表解密) * @return string */ function encryptD...

    一 对称加密

    1.mycyrpt的对称加密:

    /**
     * @param $key  //数据加密密钥 由自己定义,长度有限制 string
     * @param $string  //需要进行加解密的字符串 string
     * @param $decrypt //加密还是解密 (最简单的,0代表加密,1代表解密)
     * @return string
     */
    function encryptDecrypt($key, $string, $decrypt)
    {
        if(!$decrypt) {
            //加密
            $encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));
            return $encrypted;
        } else {
            //解密
            $decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($string), MCRYPT_MODE_CBC, md5(md5($key))), "12");
            return $decrypted;
        }
    
    }
    
    //使用方法:
    echo encryptDecrypt('passwordgg', 'Hello欢迎您',0);  //加密  ZbKOQy8uarg6nsIrpjZnJvaIDMuAAIBH3sjhBEqYujM=
    echo encryptDecrypt('passwordgg', 'ZbKOQy8uarg6nsIrpjZnJvaIDMuAAIBH3sjhBEqYujM=',1);  //解密  Hello欢迎您
    
    

    参考加密文档 php.net

    参考解密文档  php.net

    注: 此方法php7.1开始已经被废弃,开始采用openssl_encrypt和openssl_decrypt , 官方推荐使用openssl一族进行加解密

     

    2.OpenSSL 扩展中的对称加密

    /**
     * @param string $data 需要加解密的数据字符串 string
     * @param int $yes 加密还是解密(1表示加密,0表示解密)
     * @param string $key 数据加密密钥
     * @param string $iv 初始化向量 //注:这里为了显示效果,暂时将iv存储到session中,
     * @param string $iv 实际应用中,应该将iv和加密后的字符串都存储在数据库
     * @param string $encryptMethod  数据加密方式 100余种,可通过openssl_get_cipher_methods()函数获取,
     * @param string $encryptMethod  选择其中一种(如果选择cbc结尾的加密算法,需要初始化向量iv,如本例)
     * @return string
     */
    function openssl_crypt($data = '', $yes = 1, $key = 'secret', $iv = '', $encryptMethod = 'aes-256-cbc')
    {
    
        if($yes) {
            $ivLength = openssl_cipher_iv_length($encryptMethod); //获取该加密算法iv应该具有的长度
            $iv = openssl_random_pseudo_bytes($ivLength, $isStrong); //生成iv(初始化向量)
            if (false === $iv && false === $isStrong) {
                die('IV generate failed');
            }
            //加密
            $encrypted = openssl_encrypt($data, $encryptMethod, $key, 0, $iv);
            $_SESSION['iv'] = $iv; //将iv存到session中
            return $encrypted;
    
        } else {
            //解密
            $decrypted = openssl_decrypt($data, $encryptMethod, $key, 0, $iv);
            return $decrypted;
        }
    }
    
    //使用方法
    echo $a = openssl_crypt('我爱北京天安门 /我爱祖国',1,'passG506'); //加密 LMcwSGlTFijXRdcPaccYoc08xgr7NydtZ+Wrhdv/145gF3/ayKQCJvRLmvhs5ec8
    echo "<br>";
    echo openssl_crypt($a,0,'passG506',$_SESSION['iv']); //解密 我爱北京天安门 /我爱祖国

    注: 1. 为什么要生成iv,iv的作用是什么

    回顾一下 openssl_get_cipher_methods() 返回的加密算法列表,有很多名字中间带有 “CBC” 字样,这些加密算法使用了同一种加密模式,也就是 密码分组链接模式(Cipher Block Chaining)。

     

    在 CBC 模式的加密算法中,明文会被分成若干个组,以组为单位加密。每个组的加密过程,依赖他前一个组的数据:需要跟前一组的数据进行异或操作后生成本组的密文。那么最开头的那个组又要依赖谁呢?依赖的就是 IV,所以这就是为什么 IV 要叫初始化向量。IV 是 初始化向量(initialization vector)的缩写

    IV 应该是随机生成的,所以代码用到了 openssl_random_pseudo_bytes() 生成 IV。该函数接收一个 int,代表需要生成的 IV 的长度。

    IV 长度随加密算法不同而不同。一般人是记不住那么多算法需要的 IV 长度的。所以直接使用 openssl_cipher_iv_length() 函数,这个函数返回一个 int,表示加密算法需要的 IV 长度:

    echo openssl_cipher_iv_length('AES-256-CBC'); // 16
    echo openssl_cipher_iv_length('BC-CBC'); // 8
    echo openssl_cipher_iv_length('AES-128-ECB'); // 0

    比如 AES-256-CBC 需要16位的 IV、 BC-CBC 需要 8 位的 IV、而AES-128-ECB 不需要 IV,所以返回了 0。

     

    2. 在使用过程中需要注意的问题

    在进行加解密时,两个函数除了第一个参数不同,其余参数都要保证相同才能顺利解密。最后,在使用需要 IV 的加密算法时,需要注意:

    必须传 $iv 参数,不传的话PHP将会抛出一个 Warning
    IV 应该是随机生成的(比如用 openssl_random_pseudo_bytes() ),不能人为设定
    每次加密都应该重新生成一次 IV ,不可偷懒多次加密采用相同 IV
    IV 要随着密文一起保存(不然就没法解密啦),可以直接附在密文串后面,也可以分开保存

    如果看不懂,可以参考对称加密

     

    二 非对称加密

     

    常用的非对称加密有RSA算法,非对称加密和解密使用的是不同的密钥,其中一个对外公开作为公钥,另一个只有私有者拥有,作为私钥。

    用私钥加密的信息只有公钥才能解开,或者反之用公钥加密的信息只有私钥才能解开。

    在RSA加解密之前,需要先生成一对公私钥,可使用Linux自带的RSA密钥生成工具openssl获取一对公私钥,也可以使用PHP openssl扩展函数生成一对公私钥。

     

    示例代码:

    ---以后再补----

    可参考:RSA非对称加密

     

    注:非对称加密的缺点是机密和解密花费时间长,速度慢,只适合对少量数据进行加密。

    如果既想有很快的加密速度,又想保证数据比对称加密更安全,可以使用混合加密。(即 对数据进行对称加密,对密钥做非对称加密)

    解密的时候,先用非对称加密得到密钥,再用密钥解开密文得到明文。

     

    展开全文
  • PHP加密解密字符串

    千次阅读 2016-10-08 15:35:39
    项目中有时我们需要使用PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这个加密后的字符串可以通过解密算法进行解密,便于程序对解密后的信息进行处理。 最常见的应用在用户登录以及一些API...

    项目中有时我们需要使用PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这个加密后的字符串可以通过解密算法进行解密,便于程序对解密后的信息进行处理。

    最常见的应用在用户登录以及一些API数据交换的场景。

    笔者收录了一些比较经典的PHP加密解密函数代码,分享给大家。加密解密原理一般都是通过一定的加密解密算法,将密钥加入到算法中,最终得到加密解密结果。

    1、非常给力的authcode加密函数,Discuz!经典代码(带详解):

    function authcode($string$operation = 'DECODE'$key = ''$expiry = 0) {   
        // 动态密匙长度,相同的明文会生成不同密文就是依靠动态密匙   
        $ckey_length = 4;   
           
        // 密匙   
        $key = md5($key ? $key : $GLOBALS['discuz_auth_key']);   
           
        // 密匙a会参与加解密   
        $keya = md5(substr($key016));   
        // 密匙b会用来做数据完整性验证   
        $keyb = md5(substr($key1616));   
        // 密匙c用于变化生成的密文   
        $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string0$ckey_length): 
    substr(md5(microtime()), -$ckey_length)) : '';   
        // 参与运算的密匙   
        $cryptkey = $keya.md5($keya.$keyc);   
        $key_length = strlen($cryptkey);   
        // 明文,前10位用来保存时间戳,解密时验证数据有效性,10到26位用来保存$keyb(密匙b), 
    //解密时会通过这个密匙验证数据完整性   
        // 如果是解码的话,会从第$ckey_length位开始,因为密文前$ckey_length位保存 动态密匙,以保证解密正确   
        $string = $operation == 'DECODE' ? base64_decode(substr($string$ckey_length)) :  
    sprintf('%010d'$expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 016).$string;   
        $string_length = strlen($string);   
        $result = '';   
        $box = range(0255);   
        $rndkey = array();   
        // 产生密匙簿   
        for($i = 0$i <= 255$i++) {   
            $rndkey[$i] = ord($cryptkey[$i % $key_length]);   
        }   
        // 用固定的算法,打乱密匙簿,增加随机性,好像很复杂,实际上对并不会增加密文的强度   
        for($j = $i = 0$i < 256$i++) {   
            $j = ($j + $box[$i] + $rndkey[$i]) % 256;   
            $tmp = $box[$i];   
            $box[$i] = $box[$j];   
            $box[$j] = $tmp;   
        }   
        // 核心加解密部分   
        for($a = $j = $i = 0$i < $string_length$i++) {   
            $a = ($a + 1) % 256;   
            $j = ($j + $box[$a]) % 256;   
            $tmp = $box[$a];   
            $box[$a] = $box[$j];   
            $box[$j] = $tmp;   
            // 从密匙簿得出密匙进行异或,再转成字符   
            $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));   
        }   
        if($operation == 'DECODE') {  
            // 验证数据有效性,请看未加密明文的格式   
            if((substr($result010) == 0 || substr($result010) - time() > 0) &&  
    substr($result1016) == substr(md5(substr($result26).$keyb), 016)) {   
                return substr($result26);   
            } else {   
                return '';   
            }   
        } else {   
            // 把动态密匙保存在密文里,这也是为什么同样的明文,生产不同密文后能解密的原因   
            // 因为加密后的密文可能是一些特殊字符,复制过程可能会丢失,所以用base64编码   
            return $keyc.str_replace('=''', base64_encode($result));   
        }   

    函数authcode($string, $operation, $key, $expiry)中的$string:字符串,明文或密文;$operation:DECODE表示解密,其它表示加密;$key:密匙;$expiry:密文有效期。

    用法:

    $str = 'abcdef'
    $key = 'www.helloweba.com'
    echo authcode($str,'ENCODE',$key,0); //加密 
    $str = '56f4yER1DI2WTzWMqsfPpS9hwyoJnFP2MpC8SOhRrxO7BOk'
    echo authcode($str,'DECODE',$key,0); //解密 

    2、加解密函数encrypt():

    function encrypt($string,$operation,$key=''){ 
        $key=md5($key); 
        $key_length=strlen($key); 
          $string=$operation=='D'?base64_decode($string):substr(md5($string.$key),0,8).$string
        $string_length=strlen($string); 
        $rndkey=$box=array(); 
        $result=''
        for($i=0;$i<=255;$i++){ 
               $rndkey[$i]=ord($key[$i%$key_length]); 
            $box[$i]=$i
        } 
        for($j=$i=0;$i<256;$i++){ 
            $j=($j+$box[$i]+$rndkey[$i])%256
            $tmp=$box[$i]; 
            $box[$i]=$box[$j]; 
            $box[$j]=$tmp
        } 
        for($a=$j=$i=0;$i<$string_length;$i++){ 
            $a=($a+1)%256
            $j=($j+$box[$a])%256
            $tmp=$box[$a]; 
            $box[$a]=$box[$j]; 
            $box[$j]=$tmp
            $result.=chr(ord($string[$i])^($box[($box[$a]+$box[$j])%256])); 
        } 
        if($operation=='D'){ 
            if(substr($result,0,8)==substr(md5(substr($result,8).$key),0,8)){ 
                return substr($result,8); 
            }else
                return''
            } 
        }else
            return str_replace('=','',base64_encode($result)); 
        } 

    函数encrypt($string,$operation,$key)中$string:需要加密解密的字符串;$operation:判断是加密还是解密,E表示加密,D表示解密;$key:密匙。

    用法:

    $str = 'abc'
    $key = 'www.helloweba.com'
    $token = encrypt($str'E'$key); 
    echo '加密:'.encrypt($str'E'$key); 
    echo '解密:'.encrypt($str'D'$key); 
    展开全文
  • PHP加密解密技巧

    千次阅读 2016-08-16 17:44:31
    使用这些PHP加密解密的原因是因为有时自己的URL地址被人获取以后想破解你里面传值的内容就必须知道你的key,没有key,他应该要破了一阵子才能知道你URL里面的内容吧... 闲话少说,先将它们打包成一个文件就叫fun.php...

    使用这些PHP加密解密的原因是因为有时自己的URL地址被人获取以后想破解你里面传值的内容就必须知道你的key,没有key,他应该要破了一阵子才能知道你URL里面的内容吧...

    闲话少说,先将它们打包成一个文件就叫fun.php吧

    1. < ?php  
    2. function passport_encrypt($txt, $key) {  
    3. srand((double)microtime() * 1000000);  
    4. $encrypt_key = md5(rand(0, 32000));  
    5. $ctr = 0;  
    6. $tmp = '';  
    7. for($i = 0;$i < strlen($txt); $i++) {  
    8. $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;  
    9. $tmp .= $encrypt_key[$ctr].($txt[$i]
       ^ $encrypt_key[$ctr++]);  
    10. }  
    11. return base64_encode(passport_key($tmp, $key));  
    12. }  
    13. function passport_decrypt($txt, $key) {  
    14. $txt = passport_key(base64_decode($txt), $key);  
    15. $tmp = '';  
    16. for($i = 0;$i < strlen($txt); $i++) {  
    17. $md5 = $txt[$i];  
    18. $tmp .= $txt[++$i] ^ $md5;  
    19. }  
    20. return $tmp;  
    21. }  
    22. function passport_key($txt, $encrypt_key) {  
    23. $encrypt_key = md5($encrypt_key);  
    24. $ctr = 0;  
    25. $tmp = '';  
    26. for($i = 0; $i < strlen($txt); $i++) {  
    27. $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;  
    28. $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];  
    29. }  
    30. return $tmp;  
    31. }  
    32. ?> 

    以下是一些示例…加深对这三个PHP加密解密函数的理解…
     

    1. //string.php  
    2. <?php   include "fun.php";   $txt = "This is a test";   $key = "testkey";   $encrypt = passport_encrypt($txt,$key);   $decrypt = passport_decrypt($encrypt,$key);   echo $txt."<br><hr>";   echo $encrypt."<br><hr>";   echo $decrypt."<br><hr>";   ?>
    3. //array.php  
    4. <?php   include "fun.php";   $arrayarray = array(   "a" => "1",   "b" => "2",   "c" => "3",   "d" => "4"   );   //serialize产生一个可存储的值,返回一个字符串,unserialize还原   $txt = serialize($array);   $key = "testkey";   $encrypt = passport_encrypt($txt,$key);   $decrypt = passport_decrypt($encrypt,$key);   $decryptArray = unserialize($decrypt);   echo $txt."<br><hr>";   echo $encrypt."<br><hr>";   echo $decrypt."<br><hr>";   echo $decryptArray."<br><hr>";   ?>

    关键的地方来了…当你要跳转到另外一个网址,但又要保证你的session无误的时候,你需要对session作一个处理.貌似一个公司有一个网站又有一个论坛,两个地方都有注册和登录,但又不想让用户在主页登录后跳转到论坛的时候session失效,即是登录一次跑完整间公司…

    那要怎样来处理用户的session呢…

    网页都是无状态的,如果要在新的网页中继续使用session,则需要把session从一个地方移到另一个地方,可能有些人已经想到了,我可以通过url传址的方式来调用它….而PHP有个处理session的变量,叫$_SESSION.于是….

    将需要注册的session转换成一个数组吧.那么,你可以这样写:

    1. //login.php  
    2. < ?php  
    3. session_start();  
    4. include “fun.php”;  
    5. ….  
    6. $_SESSION[“userid”];  
    7. $_SESSION[“username”];  
    8. $_SESSION[“userpwd”];  
    9. …  
    10. header("Location: http:
      //$domain/process.php?
      s="
      .urlencode(passport_encrypt
      (serialize($_SESSION),"
      sessionkey")));  
    11. ?> 

    PHP加密解密例子中先用serialize将$_SESSION变成可存储的数据,然后通过passport_encrypt将这个数据加密,加urlencode的原因是因为$_SESSION加密时,有可能会产生像料想不到的编码,所以以防万一…(事实证明非常有效)
    处理下先

    1. //process.php  
    2. < ?php  
    3. session_start();  
    4. include “fun.php”;  
    5. $_SESSION=unserialize(passport
      _decrypt($_GET["s"],"sessionkey"));  
    6. header("Location: http://$domain/index.php");  
    7. ?> 

    先用$_GET[“s”]获取URL的参数,然后用passport_decrypt将其解密,再用unserialize将其数据还原成原始数据
    到了这步处理,你的网页就可能通过header自由跳转啦….

    这种PHP加密解密方法还涉及到安全性的问题,如果你的url地址在传址的过程中被人家获取的话,那就真的是不好意思了…人家虽然可能破解不了url里边的内容,但人家也可以直接用这个url地址来登录你的一些个人账户啊,邮箱帐户啊甚至银行帐户(当然很少人会这样写,我例外,哈哈)…听起来好怕….但其实你可以在跳转页面作取消session处理….

    以下是加强版的process.php

    1. < ?php  
    2. session_start();  
    3. include_once "fun.php";  
    4. $_SESSION=unserialize(passport_
      decrypt($_GET["s"],"sessionkey"));  
    5. if((time()-$_SESSION["TIME"])>30){  
    6. header("Location: http://
      $domain/ login.php");  
    7. unset($_SESSION["USERNAME"]);  
    8. unset($_SESSION["PASSWORD"]);  
    9. }  
    10. else  
    11. header("Location: http://
      $domain/ index.php");  
    12. ?> 

    写这个PHP加密解密文件之前,你还要在登录那边设置

    $_SESSION["TIME"] = time();

    设置这个的原因主要是获取两边的时间,如果跳转的时候超过30秒的时候,你就可以让它跳转到login.php登录页面,网速慢的客户就不好意思啦…但这也预防了如果此url被人获取,而这个人又没有在30秒内登录的话,那就不好意思啊,超时重新登录.

    $_SESSION["USERNAME"]和$_SESSION["PASSWORD"] 这两个东东就是用户登录时需要输入的用户名和密码了….取消这两个session的原因就是因为如果你的url被人获取了,那个人虽然在超过30秒内跳转到loign.php的页面,但那些传过来的session依然有效,只要将url后缀login.php改为index.php….那他一样登录成功…


    展开全文
  • 六个经典的PHP加密解密算法 六个经典的PHP加密解密算法 非常给力的authcode加密函数,Discuz!经典代码(带详解) 函数authcode($string, $operation, $key, expiry)中的expiry)中的expiry)中的string:字符串,明文或...
  • 2个比较经典的PHP加密解密函数分享

    千次阅读 2015-04-21 16:44:15
    这篇文章主要介绍了2个比较经典的PHP加密解密函数分享,一个是Discuz!的authcode加密函数(带详细分解),一个是encrypt()函数,都比较经典,需要的朋友可以参考下 项目中有时我们需要使用PHP将特定的信息进行加密,也...
  • php class EncryptUtil { const UID_AES_KEY = 'YOUR_AES_KEY_STR'; public static function decrypt($data, $key = self::UID_AES_KEY) { $data = base64_decode($data); $hash = md5($key); $cipherText =...
  • java和php加解密对接

    千次阅读 2016-11-25 13:13:31
    之前写过一个java和php加解密对接文章,好像解密后有部分字符串乱码,现在重新给一个加解密的对接方案: java代码:import java.util.UUID; import org.apache.commons.codec.binary.Base64; public class Base...
  • php加密解密功能类

    千次阅读 2014-11-06 15:27:22
    这两天突发奇想想要用php写一个对日常项目加密以及解密的功能,经过努力简单的封装了一个对php代码进行加密解密的类,一些思想也是来自于网络,初步测试用着还行,可以实现对指定项目的加密以及解密(只针对本类中...
  • 虽然我们利用PHP可以利用这些函数写出可逆函数来。但是跨语言时这类可逆函数非常难搞定。所以这时尽量使用AES DES RC4 Rabbit TripleDes这些方法。 包含超时的加密解密函数 /** * 加密 * @param string $...
  • 项目中有时我们需要使用PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这个加密后的字符串可以通过解密算法进行解密,便于程序对解密后的信息进行处理。 最常见的应用在用户登录以及一些API数据...
  • 一、先通过一个PHP加密解密方法来看:function encrypt($string,$operation,$key='darling'){ $key=md5($key); $key_length=strlen($key); $string=$operation=='D'?base64_decode($string):substr(md5($string.$...
  • 最近项目需求,要用php将一些普通的信息通过加密算法生成一个加密串,加密串能通过解密...因为没有操作过,所以想问一下这里的朋友是否有现成的加解密算法的思路,算法需要够复杂不易被破解,有具体代码更好就更好啦
  • PHP加解密函数 password_hash() 函数 password_verify() 函数 password_hash() 使用足够强度的单向散列算法创建密码的散列(hash)。 password_hash() 兼容 crypt()。 所以, crypt() 创建的密码散列也可用于 ...
  • PHP加解密基础知识

    千次阅读 2017-05-17 17:19:17
    使用适当的加密方法可以有效的保护数据安全。下面我将简单的介绍下加密、解密。以及介绍2个比较好的加解密方式常见的加密算法有那些: md5 des 3des rsa blowfish sha-256 sha-512等算法的分类: 1)对称算
  • 今天一直折腾和JAVA对接数据加密解密的问题。 刚开始使用TEA的加密算法,但是JAVA那边和PHP端加密出来的结果不一样 只能修改算法,将算法修改成了DES的加密算法 但是PHP需要装一个mcrypt扩展,这点有点烦人 看代码吧...
  • 以前用过php_screw工具的朋友一定非常喜欢他的小巧和开源免费。但是自从最后一个版本php_screw-1.5.tar.gz 之后再也没有更新版本了,而旧的版本无法在php5.3以上的版本中使用。经过修改源码测试,修改过的版本可以在...
  • PHP 加密解密和解决URL传输问题

    千次阅读 2016-10-29 16:48:04
    base64 加密和解密 &lt;meta charset="utf-8"&gt; &lt;?php $str = "http://www.onestopweb.cn"; $en=base64_encode($str); $de=base64_decode($en); echo "原型:$str&...
  • <?php function encode_pass($tex,$key,$type="encode",$expiry=0){ $chrArr=array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z', 'A','B','C','D'...
  • //解密: $ciphertext_dec = base64_decode($ciphertext_base64); $iv_dec = substr($ciphertext_dec, 0, $iv_size); $ciphertext_dec = substr($ciphertext_dec, $iv_size); $plaintext_dec = mcrypt_decrypt...
  • 一个加解密类。如果你想在用户忘记密码时为他或她找回原来的密码,那么这个类是个好用的工具 用户注册的密码一般不会明文保存,总得加个密先。最简单的当然是在数据库sql语句中调用md5函数加密用户密码。这里...
  • kodexplorer可道云PHP 加密解密模块

    千次阅读 2018-11-28 10:34:33
    &lt;?php /* * @link http://kodcloud.com/ * @author warlee | e-mail:kodcloud@qq.com * @copyright warlee 2014.(Shanghai)Co.,Ltd * @license ...* 字符串...
  • 迅速学会PHP加密解密技巧

    千次阅读 2010-04-14 14:06:00
    闲话少说,先将它们打包成一个文件就叫fun.php吧 < ?php function passport_encrypt($txt, $key) { srand((double)microtime() * 1000000); $encrypt_key = md5(rand(0, 32000)); $ctr = 0; $tmp = ''; for($i...
  • 包括康盛自己的产品,以及大部分中国使用PHP的公司都用这个函数进行加密,authcode 是使用异或运算进行加密和解密。 原理如下,假如: 加密 明文:1010 1001 密匙:1110 0011 密文:0100 1010 得出密文0100 1010,...
  • // $operation:DECODE表示解密,其它表示加密 // $key: 密匙 // $expiry:密文有效期 function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) { // 动态密匙长度,相同的明文会生成不同密文...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,225
精华内容 12,090
关键字:

php加解密