目录
- 算法一:
- 算法二:
- 算法三(改进第一个加密之后的算法)
本文实例讲述了php实现的三个常用加密解密功能函数。分享给大家供大家参考,具体如下:
算法一:
//加密函数function lock_url($txt,$key=‘www.jb51.net‘){ ?$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=‘www.jb51.net‘){ ?$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);}
用法:
$str="脚本之家";$pwd = lock_url($str);echo "加密之后:".$pwd."<br/>";echo "解密还原:".unlock_url($pwd);
运行结果:
加密之后:7MI21MNFgbrlr解密之后:脚本之家
算法二:
<?phpfunction passport_encrypt($txt, $key = ‘www.jb51.net‘) { ??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 = ‘www.jb51.net‘) { ??$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; } ?>
用法:
<?php$txt = "1";$key = "testkey";$encrypt = passport_encrypt($txt,$key);$decrypt = passport_decrypt($encrypt,$key);echo $encrypt."<br>";echo $decrypt."<br>";?>
运行结果:
ADE%3D1
算法三(改进第一个加密之后的算法)
//加密函数function lock_url($txt,$key=‘www.jb51.net‘){ ?$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=‘www.jb51.net‘){ ?$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);}
用法
$str="脚本之家";$pwd = lock_url($str);echo "加密之后:".$pwd."<br/>";echo "解密还原:".unlock_url($pwd);
运行结果:
加密之后:clNBeVRPSS04VHhzYj0otMHNadjJWUTR5ME4%3D解密之后:脚本之家
php实现的三个常用加密解密功能函数示例
原文地址:https://www.cnblogs.com/haima/p/9789081.html