PHP 常见加密方式

PHP 常见加密方式,第1张

概述1.方法<?phpfunctionencryptDecrypt($key,$string,$decrypt){if($decrypt){$decrypted=rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256,md5($key),base64_decode($string),MCRYPT_MODE_CBC,md5(md5($key))),"12");retur 1.方法
<?PHP  function encryptDecrypt($key, $string, $decrypt){       if($decrypt){           $decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($string), MCRYPT_MODE_CBC, md5(md5($key))), "12");           return $decrypted;       }else{           $encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));           return $encrypted;       }   }   //加密:"z0JAx4qMwcF+db5TNbp/xwdUM84snRsXvvpXuaCa4Bk="  echo encryptDecrypt('password', 'Helloweba欢迎您',0);   //解密:"Helloweba欢迎您"  echo encryptDecrypt('password', 'z0JAx4qMwcF+db5TNbp/xwdUM84snRsXvvpXuaCa4Bk=',1);  ?>  
2.方法
<?PHP  //加密函数  function lock_url($txt,$key='liiu'){      $chars = "ABCDEFGHIJKLMnopQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+";      $nh = rand(0,64);      $ch = $chars[$nh];      $mdKey = md5($key.$ch);      $mdKey = substr($mdKey,$nh%8, $nh%8+7);      $txt = base64_encode($txt);      $tmp = '';      $i=0;$j=0;$k = 0;      for ($i=0; $i<strlen($txt); $i++) {          $k = $k == strlen($mdKey) ? 0 : $k;          $j = ($nh+strpos($chars,$txt[$i])+ord($mdKey[$k++]))%64;          $tmp .= $chars[$j];      }      return urlencode($ch.$tmp);  }  //解密函数  function unlock_url($txt,$key='liiu'){      $txt = urldecode($txt);      $chars = "ABCDEFGHIJKLMnopQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+";      $ch = $txt[0];      $nh = strpos($chars,$ch);      $mdKey = md5($key.$ch);      $mdKey = substr($mdKey,$nh%8, $nh%8+7);      $txt = substr($txt,1);      $tmp = '';      $i=0;$j=0; $k = 0;      for ($i=0; $i<strlen($txt); $i++) {          $k = $k == strlen($mdKey) ? 0 : $k;          $j = strpos($chars,$txt[$i])-$nh - ord($mdKey[$k++]);          while ($j<0) $j+=64;          $tmp .= $chars[$j];      }      return base64_decode($tmp);  }  ?>  
3.方法
<?PHP  //改进后的算法  //加密函数  function lock_url($txt,$key='str'){      $txt = $txt.$key;      $chars = "ABCDEFGHIJKLMnopQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+";      $nh = rand(0,64);      $ch = $chars[$nh];      $mdKey = md5($key.$ch);      $mdKey = substr($mdKey,$nh%8, $nh%8+7);      $txt = base64_encode($txt);      $tmp = '';      $i=0;$j=0;$k = 0;      for ($i=0; $i<strlen($txt); $i++) {          $k = $k == strlen($mdKey) ? 0 : $k;          $j = ($nh+strpos($chars,$txt[$i])+ord($mdKey[$k++]))%64;          $tmp .= $chars[$j];      }      return urlencode(base64_encode($ch.$tmp));  }  //解密函数  function unlock_url($txt,$key='str'){      $txt = base64_decode(urldecode($txt));      $chars = "ABCDEFGHIJKLMnopQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+";      $ch = $txt[0];      $nh = strpos($chars,$ch);      $mdKey = md5($key.$ch);      $mdKey = substr($mdKey,$nh%8, $nh%8+7);      $txt = substr($txt,1);      $tmp = '';      $i=0;$j=0; $k = 0;      for ($i=0; $i<strlen($txt); $i++) {          $k = $k == strlen($mdKey) ? 0 : $k;          $j = strpos($chars,$txt[$i])-$nh - ord($mdKey[$k++]);          while ($j<0) $j+=64;          $tmp .= $chars[$j];      }      return trim(base64_decode($tmp),$key);  }  ?> 
4.方法
<?PHP  function passport_encrypt($txt, $key = 'liiu') {       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 urlencode(base64_encode(passport_key($tmp, $key)));   }   function passport_decrypt($txt, $key = 'liiu') {       $txt = passport_key(base64_decode(urldecode($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;   }   $txt = "1";   $key = "testkey";   $encrypt = passport_encrypt($txt,$key);   $decrypt = passport_decrypt($encrypt,$key);   echo $encrypt."<br>";   echo $decrypt."<br>";   ?>   
5.方法
<?PHP  //函数authcode($string, $operation, $key, $expiry)中的$string:字符串,明文或密文;$operation:DECODE表示解密,其它表示加密;$key:密匙;$expiry:密文有效期。  function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {         // 动态密匙长度,相同的明文会生成不同密文就是依靠动态密匙         $ckey_length = 4;         // 密匙         $key = md5($key ? $key : $GLOBALS['discuz_auth_key']);         // 密匙a会参与加解密         $keya = md5(substr($key, 0, 16));         // 密匙b会用来做数据完整性验证         $keyb = md5(substr($key, 16, 16));         // 密匙c用于变化生成的密文         $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $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), 0, 16).$string;         $string_length = strlen($string);         $result = '';         $Box = range(0, 255);         $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($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) &&  substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {                 return substr($result, 26);             } else {                 return '';             }         } else {             // 把动态密匙保存在密文里,这也是为什么同样的明文,生产不同密文后能解密的原因             // 因为加密后的密文可能是一些特殊字符,复制过程可能会丢失,所以用base64编码             return $keyc.str_replace('=', '', base64_encode($result));         }     }   $str = 'abcdef';   $key = 'www.helloweba.com';   echo authcode($str,'ENCODE',$key,0); //加密   $str = '56f4yER1DI2WTzWMqsfPpS9hwyoJnFP2MpC8SOhRrxO7BOk';   echo authcode($str,'DECODE',$key,0); //解密   ?> 
6.方法
<?PHP  //函数encrypt($string,$operation,$key)中$string:需要加密解密的字符串;$operation:判断是加密还是解密,E表示加密,D表示解密;$key:密匙。  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));       }   }   $str = 'abc';   $key = 'www.helloweba.com';   $token = encrypt($str, 'E', $key);   echo '加密:'.encrypt($str, 'E', $key);   echo '解密:'.encrypt($str, 'D', $key);  ?>  
7.方法
<?PHP/** * DES加密解密 */class Mcrypt{    public function __construct(){}    function getSKey($msg) {        if(!$msg) {            dIE('请输入参数值');        }        /* 打开加密算法和模式 */        $td = mcrypt_module_open('des', '', 'ecb', '');        /* 创建初始向量,并且检测密钥长度。 windows 平台请使用 MCRYPT_RAND。 */        $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_RANDOM);        $ks = mcrypt_enc_get_key_size($td);        /* 创建密钥 */        $key = substr(md5($msg), 0, $ks);        /* 并且关闭模块 */        mcrypt_module_close($td);        return $key;    }    /**     *     * 加密函数     * 算法:des     * 加密模式:ecb     * 补齐方法:PKCS5     *     * @param unkNown_type $input     */    public function encryptDesEcbPKCS5($input, $key)    {        $size = mcrypt_get_block_size('des', 'ecb');        $input = $this->pkcs5_pad($input, $size);        $td = mcrypt_module_open('des', '', 'ecb', '');        //获取密钥的最大长度        $ks = mcrypt_enc_get_key_size($td);        $key = substr($key, 0, $ks);        //加密向量值        $iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);        //$iv =0;        $tmp = mcrypt_generic_init($td, $key, $iv);        $data = mcrypt_generic ($td, $input);        mcrypt_generic_deinit($td);        mcrypt_module_close($td);        return $data;    }    /**     * 解密函数     * 算法:des     * 加密模式:ecb     * 补齐方法:PKCS5     * @param unkNown_type $input     */    public function decryptDesEcbPKCS5($input, $key)    {        $size = mcrypt_get_block_size('des', 'ecb');        $td = mcrypt_module_open('des', '', 'ecb', '');        /*获取密钥的最大长度*/        $ks = mcrypt_enc_get_key_size($td);        $key = substr($key, 0, $ks);        $iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);        mcrypt_generic_init($td, $key, $iv);        $data = mdecrypt_generic($td, $input);        mcrypt_generic_deinit($td);        mcrypt_module_close($td);        $data = $this->pkcs5_unpad($data, $size);        return $data;    }    private function pkcs5_pad($text, $blocksize)    {        $pad = $blocksize - (strlen($text) % $blocksize);        return $text . str_repeat(chr($pad), $pad);    }    private function pkcs5_unpad($text)    {        $pad = ord($text{strlen($text) - 1});        if ($pad > strlen($text))            return false;            if (strspn($text, chr($pad), strlen($text) - $pad) != $pad)                return false;                return substr($text, 0, -1 * $pad);    }}

//网络素材仅限收藏 方便学习

总结

以上是内存溢出为你收集整理的PHP 常见加密方式全部内容,希望文章能够帮你解决PHP 常见加密方式所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1000049.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存