这篇文章主要介绍了2个比较经典的PHP加密解密函数分享,一个是Discuz!的authcode加密函数(带详细分解),一个是encrypt()函数,都比较经典,需要的朋友可以参考下

项目中有时我们需要使用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($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));   }
} 

函数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);

2个比较经典的PHP加密解密函数分享相关推荐

  1. 加密解密php,2个比较经典的PHP加密解密函数分享

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

  2. php中的base64,php中base64_decode与base64_encode加密解密函数

    php中base64_decode与base64_encode加密解密函数,实例分析了base64加密解密函数的具体用法,具有一定的实用价值,需要的朋友可以参考下 本文实例讲述了php中base64_ ...

  3. 六个经典的PHP加密解密算法

    六个经典的PHP加密解密算法 六个经典的PHP加密解密算法 非常给力的authcode加密函数,Discuz!经典代码(带详解) 函数authcode($string, $operation, $ke ...

  4. php动态密码和加密解密函数的使用(动态密码、Discuz核心函数AuthCode、任意输入密码验证)

    php加密解密的使用 一.项目说明 二.项目分析 1.js外部文件 2.HTML容器构建 3.layui前端验证 4.php后端验证 封装函数 密码验证规则 strpos内置函数 三.经典的核心加密函 ...

  5. 【C 语言】文件操作 ( 文件加密解密 | 使用第三方 DES 加密解密库 | 头文件导入 | 兼容 C++ 语言 | 加密解密函数说明 )

    文章目录 一.导入第三方库头文件 二.头文件说明 1.兼容 C++ 语言 2.头文件导入限制 3.加密解密函数说明 一.导入第三方库头文件 对文件进行加密 , 将文件中的数据分成若干块 , 一块一块的 ...

  6. php可逆加密解密函数,php 好用可逆的 加密解密 函数。

    php 好用可逆的加密解密函数. function encode($content, $key = 'pass' ) { // 加密数据的函数 , 主要进行移位操作 $key = md5($key); ...

  7. 字符串加密解密函数 (C#) (转)

    字符串加密解密函数 (C#) (转) 字符串加密解密函数 (C#) using System; using System.Text; using System.Security.Cryptograph ...

  8. 自己实现的php加密解密函数结果纯字母和数字

    php自带的base64加密解密函数大部分人都知道,加密后很容易被解密,所以就自己实现的php加密解密函数,密文是字母和数字组合. <?php /* *加密 */ function encode ...

  9. 各种加密解密函数(URL加密解密、sha1加密解密、des加密解密)

    普通hash函数如md5.sha1.base64等都是不可逆函数.虽然我们利用php可以利用这些函数写出可逆函数来.但是跨语言时这类可逆函数非常难搞定.所以这时尽量使用AES DES RC4 Rabb ...

  10. JavaScript 自写加密解密函数

    JavaScript 自写加密解密函数 版权声明:本文为CSDN博主「zshsats」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明. 原文链接:https:// ...

最新文章

  1. Nginx源码分析--数据对齐posix_memalign和memalign函数
  2. 【飞行术】Web2.0如何改变电信业
  3. ci持续集成工程师前景_持续集成CI---失败原因
  4. 计算机pe开启网络模块,组装的电脑进入PE是哪个键
  5. java 多线程 异步日志_精彩技巧(1)-- 异步打印日志的一点事
  6. 今晚直播 | 清华大学NLP组秦禹嘉:基于自然语言解释的数据增强
  7. “docker-app”实用工具分享,大大提高 Compose 文件复用率
  8. k8s之scheduler
  9. 数据库原理—数据模型(三)
  10. 计算机控制pud,控制系统状态空间实施方案计算机控制技术课程实施方案
  11. 2D转换之旋转rotate(CSS3)
  12. JavaScript:模块化及模块化规范
  13. SQL2005 游标学习
  14. PCFG中inside和outside算法详解
  15. 令人吃惊,这个短信平台在这些方面居然完胜阿里云
  16. 广州史帝奇轨道环幕影院的优势、特点、应用领域
  17. 校验集装箱号;java校验集装箱号并附解析
  18. 东莞市重点培育上市后备科技企业名单(科技局)
  19. keil警告 LED.C(38): warning C276: constant in condition expression
  20. 你的typora图床配置了吗?人家都开始收费了

热门文章

  1. 【博客管理】短期长期计划【置顶】
  2. 基于AE+C#实现在TOCControl中实现指定图层删除
  3. 【LeetCode】【字符串】题号:*434. 字符串中的单词数
  4. 从零基础入门Tensorflow2.0 ----一、3.3 实战深度神经网络(激活函数)
  5. 【GIS免费精品课程笔记】1 传统数据处理VS大数据处理思维
  6. ENVI Flaash大气校正与6S大气校正(TM为例)
  7. 生成树协议计算机网络,【图片】生成树协议奇怪!我错哪了两边都绿了呀【计算机网络吧】_百度贴吧...
  8. 数据结构与算法笔记一:稀疏数组的应用
  9. Scala基础-01-Scala环境安装及基础语法(变量,函数)
  10. python如何移动文件却不覆盖现有文件_在python中创建新文件,不要覆盖现有文件...