php实现的三个常用加密解密功能函数示例
author:一佰互联 2019-04-25   click:194

本文实例讲述了php实现的三个常用加密解密功能函数。分享给大家供大家参考,具体如下:

算法一:

//加密函数function lock_url($txt,$key="www.yinxi.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.yinxi.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);

运行结果:

算法二:

<?phpfunction passport_encrypt($txt, $key = "www.yinxi.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.yinxi.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>";?>

运行结果:

算法三(改进第一个加密之后的算法)

//加密函数function lock_url($txt,$key="www.yinxi.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.yinxi.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);

运行结果:

PS:关于加密解密感兴趣的朋友还可以参考本站在线工具:

文字在线加密解密工具(包含AES、DES、RC4等):http://tools.jb51.net/password/txt_encode

MD5在线加密工具:http://tools.jb51.net/password/CreateMD5Password

在线散列/哈希算法加密工具:http://tools.jb51.net/password/hash_encrypt

在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:http://tools.jb51.net/password/hash_md5_sha

在线sha1/sha224/sha256/sha384/sha512加密工具:http://tools.jb51.net/password/sha_encode

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php加密方法总结》、《PHP编码与转码操作技巧汇总》、《PHP数学运算技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《PHP数据结构与算法教程》、《php程序设计算法总结》及《php正则表达式用法总结》

希望本文所述对大家PHP程序设计有所帮助。