分享几种好用的PHP自定义加密函数(可逆不可逆)

2023-06-02 09:27:20 作者:admin

本文整理自网络,侵删。

项目中有时我们需要使用PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这些加密后的字符串可以通过解密算法进行解密,便于程序对解密后的信息进行处理。最常见的应用在用户登录以及一些API数据交换的场景。最常见的应用在用户登录以及一些API数据交换的场景。加密解密原理一般都是通过一定的加密解密算法,将密钥加入到算法中,最终得到加密解密结果。

u=3837593897,2803417633&fm=26&gp=0.jpg

废话不多说,直接上代码。

一、第一种针对于ID的可逆加密函数,也可以用作于邀请码之类的,解密后的数据比较简单

示例:lockcode(28)=》000X unlockcode('000X')=》28

//加密函数function lockcode($code) { static $source_string = 'E5FCDG3HQA4B1NOPIJ2RSTUV67MWX89KLYZ'; $num = $code; $code = ''; while ( $num > 0) {  $mod = $num % 35;  $num = ($num - $mod) / 35;  $code = $source_string[$mod].$code; } if(empty($code[3]))  $code = str_pad($code,4,'0',STR_PAD_LEFT); return $code;}//解密函数function unlockcode($code) { static $source_string = 'E5FCDG3HQA4B1NOPIJ2RSTUV67MWX89KLYZ'; if (strrpos($code, '0') !== false)  $code = substr($code, strrpos($code, '0')+1); $len = strlen($code); $code = strrev($code); $num = 0; for ($i=0; $i < $len; $i++) {  $num += strpos($source_string, $code[$i]) * pow(35, $i); } return $num;}

二、第二种是加密函数是我在网上搜索来的,很好用,可逆加密,支持盐值参数

示例:encrypt('abcd','1234')=》nkiV93IfJ decrypt('nkiV93IfJ','1234')=》abcd

//加密函数 function encrypt($data,$key='CHENI'){  $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";  $nh = rand(0,64);  $ch = $chars[$nh];  $mdKey = md5($key.$ch);  $mdKey = substr($mdKey,$nh%8, $nh%8+7);  $data= base64_encode($data);  $tmp = '';  $i=0;$j=0;$k = 0;  for ($i=0; $i<strlen($data); $i++) {   $k = $k == strlen($mdKey) ? 0 : $k;   $j = ($nh+strpos($chars,$data[$i])+ord($mdKey[$k++]))%64;   $tmp .= $chars[$j];  }  return urlencode($ch.$tmp); }//解密函数 function decrypt($data,$key='CHENI'){ $txt = urldecode($data);  $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); }

三、第三种跟上面的比较类似,也支持盐值参数

阅读剩余部分

相关阅读 >>

nginx反向代理+dns轮询+iis7.5 千万pv 百万ip 双线 网站架构案例

个人网站运营优化经验实例分享

discuz!论坛个性签名代码全集大汇总

asp 防止sql注入代码

使用discuz关键词服务器实现php中文分词

discuzx3.1文章进行全文检索的实现方法

docker部署lnmp架构的方法

mysql的innodb引擎入门学习教程

asp.net 独立discuz头像编辑模块分离打包

Discuz论坛整合ucenter免激活,同步登录,同步退出解决方案

更多相关阅读请进入《Discuz论坛》频道 >>



在线咨询 拨打电话