转自:kin-wing日常(6种php加密解密方法)

方法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加密函数,Discuz!经典代码(带详解)
//函数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); ?>

6种php加密解密方法相关推荐

  1. swoolephp加密_6种php加密解密方法

    看代码演示: function encryptDecrypt($key, $string, $decrypt){ if($decrypt){ $decrypted = rtrim(mcrypt_dec ...

  2. ios常见加密解密方法

    在其他平台中经常会计算MD5值,在ios平台中也提供了该方法,首先需要导入头文件 [cpp] view plaincopy #import <CommonCrypto/CommonDigest. ...

  3. 计算机怎么给硬盘加密,电脑上的硬盘如何加密?几种文件加密的方法

    随着互联网的飞速发展,人们逐渐发现各种信息传播都会快,隐私一不留神就会泄漏.但无论是生活中,还是工作中,每一个人都会有一些敏感文件不想让其他人看到,所以现在很多人都想到了给私密文件进行加密,保护自己的 ...

  4. C#常用加密解密方法(MD5加密解密)

    在日常开发过程中,总会遇到需要加密解密的需求,这里我整理了C#常用的加密解密方法分享给大家. 先看看加密的基本概念: "加密",是一种限制对网络上传输数据的访问权的技术.原始数据( ...

  5. C#常用加密解密方法(DES加密解密)

    在日常开发过程中,总会遇到需要加密解密的需求,这里我整理了C#常用的加密解密方法分享给大家. 先看看加密的基本概念: "加密",是一种限制对网络上传输数据的访问权的技术.原始数据( ...

  6. C#常用加密解密方法(AES加密解密)

    在日常开发过程中,总会遇到需要加密解密的需求,这里我整理了C#常用的加密解密方法分享给大家. 先看看加密的基本概念: "加密",是一种限制对网络上传输数据的访问权的技术.原始数据( ...

  7. python实现加密字符串_Python实现对字符串的加密解密方法示例

    本文实例讲述了Python实现对字符串的加密解密方法.分享给大家供大家参考,具体如下: 需求是是要将密码存在数据库里,所以要加密解密是可逆的,在数据库里不要有特殊字符,防止数据库备份和恢复中出错. 安 ...

  8. python des解密_python实现DES加密解密方法实例详解

    本文实例讲述了python实现DES加密解密方法.分享给大家供大家参考.具体分析如下: 实现功能:加密中文等字符串 密钥与明文可以不等长 这里只贴代码,加密过程可以自己百度,此处python代码没有优 ...

  9. python如何加密字符串_Python实现对字符串的加密解密方法示例

    本文实例讲述了Python实现对字符串的加密解密方法.分享给大家供大家参考,具体如下: 需求是是要将密码存在数据库里,所以要加密解密是可逆的,在数据库里不要有特殊字符,防止数据库备份和恢复中出错. 安 ...

  10. Java实现一个简单的加密解密方法

    Crypto是Java语言写的一个简单的加密解密方法. 使用方法: 加密方法 String cipherte=Enande.encrypt(content, pass): 解密方法 Enande.de ...

最新文章

  1. linux离线安装docker教程,Linux 离线安装docker的过程
  2. Django web框架学习笔记
  3. zabbix自动化监控8(2.4)
  4. linux运维基础篇 unit14
  5. redis源码之sds
  6. 我的webpack学习笔记(二)
  7. 【pmcaff】麦肯锡:预测2025年将出现的12大颠覆技术【图】
  8. ABB机器人的 备份与恢复
  9. java平台脚本+java编译器API
  10. linux空间支持伪静态,[转载]Linux下nginx支持.htaccess文件实现伪静态的方法
  11. 倍频程分析函数matlab,瞬时声压时域数据怎么用matlab进行1/3倍频程声压级分析
  12. D. Closest Equals(线段树)
  13. 十、Mysql执行计划详细解析
  14. 耐人寻味的 8 幅Java技术图
  15. linux中级之ansible配置(roles)
  16. [python高德]行政区查询、调用wbe服务api获取省、市、区经纬度信息
  17. 谷歌开源 Embedding Projector 高维数据可视化--转自开源中国
  18. 【基于pyAudioKits的Python音频信号处理项目(一)】实现音频频谱分析仪并进行交互式滤波器设计
  19. 超火动态表白H5源码
  20. 华为PUSH 日常问题解决方案

热门文章

  1. A 45nm 1.3GHz 16.7 double-precision GFLOPS/W RISC-V processor with vector accelerators
  2. ICP算法详解——我见过最清晰的解释
  3. 腾讯技术分享实录:游戏后台开发九问
  4. google关键词查询
  5. 3dmax室内模型导入Unity3d 快速烘焙光照【2020】
  6. 公关世界杂志公关世界杂志社公关世界编辑部2022年第14期目录
  7. matlab iir滤波器系数,5.IIR数字滤波器
  8. SDU程序设计思维Week15-作业 字符串
  9. 开发板与思岚RPLIDAR A系列雷达通过串口获取数据
  10. 肿瘤基因检测的解读流程