基于PHP实现解密或加密Cloudflar邮箱保护


Posted in PHP onJune 24, 2020

Cloudflare 有一项功能挺不错的,就是将页面上所有的邮箱地址都加密起来,防止机器人抓到然后干坏事。

这项功能要在后台开启 email address obfuscation

之后就可以在页面上加入一个邮箱地址,比如说 abc@abc.com

查看源代码就能发现类似如下的代码

<a class="__cf_email__" data-cfemail="30515253705152531e535f5d" href="/cdn-cgi/l/email-protection" rel="external nofollow" >
[email protected]
</a>
<script data-cfhash="f9e31" type="text/javascript">
 /* <![CDATA[ */!function(t,e,r,n,c,a,p){try{t=document.currentScript||function(){for(t=document.getElementsByTagName('script'),e=t.length;e--;)if(t[e].getAttribute('data-cfhash'))return t[e]}();if(t&&(c=t.previousSibling)){p=t.parentNode;if(a=c.getAttribute('data-cfemail')){for(e='',r='0x'+a.substr(0,2)|0,n=2;a.length-n;n+=2)e+='%'+('0'+('0x'+a.substr(n,2)^r).toString(16)).slice(-2);p.replaceChild(document.createTextNode(decodeURIComponent(e)),c)}p.removeChild(t)}}catch(u){}}()/* ]]> */
</script>

我们可以使用 PHP 的方式将这个邮箱地址解密出来

function deCFEmail($encode){
	$k = hexdec(substr($encode,0,2));
	for($i=2, $m=''; $i < strlen($encode) - 1; $i += 2){
		$m.=chr(hexdec(substr($encode, $i, 2))^$k);
	}
	return $m;
}
echo deCFEmail("30515253705152531e535f5d")."\n";

得到的结果就是上面所说的 abc@abc.com

但是我们不想用 Cloudflare 的相关服务,就是单纯想用他这种加密技术,所以我们就得将加密的算法也找出来

我们可以利用上面解密的代码反向执行,就可以得到一个加密的算法了

function encodeEmail($email, $key=0) {
	$chars = str_split($email);
	$string = '';
	$key = $key ? $key : rand(10, 99);
	foreach ($chars as $value) {
		$string .= sprintf("%02s", dechex(ord($value)^$key));
	}
	return dechex($key).$string;
}

我们就能利用这个加密算法,将手机号、邮箱地址、身份证等各种敏感的信息都加密起来,防止别人能轻易的抓取到数据

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php设计模式 Facade(外观模式)
Jun 26 PHP
Thinkphp中的curd应用实用要点
Jan 04 PHP
54个提高PHP程序运行效率的方法
Jul 19 PHP
Yii清理缓存的方法
Jan 06 PHP
PHP编程 SSO详细介绍及简单实例
Jan 13 PHP
PHP 中使用explode()函数切割字符串为数组的示例
May 06 PHP
Laravel接收前端ajax传来的数据的实例代码
Jul 20 PHP
PHP PDOStatement::nextRowset讲解
Feb 01 PHP
PHP中__set()实例用法和基础讲解
Jul 23 PHP
Laravel 5.5 异常处理 &amp; 错误日志的解决
Oct 17 PHP
PHP实现随机发放扑克牌
Apr 21 PHP
PHP tp5中使用原生sql查询代码实例
Oct 28 PHP
解决PhpStorm64不能启动的问题
Jun 20 #PHP
php实现断点续传大文件示例代码
Jun 19 #PHP
PHP基于openssl实现非对称加密代码实例
Jun 19 #PHP
如何在PHP环境中使用ProtoBuf数据格式
Jun 19 #PHP
基于PHP实现堆排序原理及实例详解
Jun 19 #PHP
深入分析PHP设计模式
Jun 15 #PHP
Laravel6.18.19如何优雅的切换发件账户
Jun 14 #PHP
You might like
PHP实现定时执行任务的方法
2014/10/05 PHP
php中的ini配置原理详解
2014/10/14 PHP
php中Array2xml类实现数组转化成XML实例
2014/12/08 PHP
PHP中preg_match正则匹配中的/u、/i、/s含义
2015/04/17 PHP
Zend Framework+smarty用法实例详解
2016/03/19 PHP
php 输入输出流详解及示例代码
2016/08/25 PHP
PHP大文件及断点续传下载实现代码
2020/08/18 PHP
JavaScript 一道字符串分解的题目
2011/08/03 Javascript
javascript里绝对用的上的字符分割函数总结
2014/07/31 Javascript
EasyUI闪屏EasyUI页面加载提示(原理+代码+效果图)
2016/02/21 Javascript
Webpack 实现 AngularJS 的延迟加载
2016/03/02 Javascript
jQuery技巧之让任何组件都支持类似DOM的事件管理
2016/04/05 Javascript
JS实现图片延迟加载并淡入淡出效果的简单方法
2016/08/25 Javascript
利用Js的console对象,在控制台打印调式信息测试Js的实现
2016/11/26 Javascript
jQuery插件HighCharts实现的2D面积图效果示例【附demo源码下载】
2017/03/15 Javascript
js实现日期显示的一些操作(实例讲解)
2017/07/27 Javascript
Vue 项目中遇到的跨域问题及解决方法(后台php)
2018/03/28 Javascript
详解angular脏检查原理及伪代码实现
2018/06/08 Javascript
JavaScript实现动态添加、移除元素或属性的方法分析
2019/01/03 Javascript
layui中的switch开关实现方法
2019/09/03 Javascript
关于layui的动态图标不显示的解决方法
2019/09/04 Javascript
[01:09]2014DOTA2国际邀请赛 TI4西雅图DOTA2 中国美女coser加油助威
2014/07/20 DOTA
详解Python中的文件操作
2016/08/28 Python
Django + Uwsgi + Nginx 实现生产环境部署的方法
2018/06/20 Python
Python常用模块logging——日志输出功能(示例代码)
2019/11/20 Python
如何用Python 实现全连接神经网络(Multi-layer Perceptron)
2020/10/15 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
2020/11/17 Python
浅谈CSS3动画的回调处理
2016/07/21 HTML / CSS
应届毕业生就业自荐信
2013/10/26 职场文书
开工仪式主持词
2014/03/20 职场文书
高一课前三分钟演讲稿
2014/09/13 职场文书
2014年班务工作总结
2014/12/02 职场文书
单位实习鉴定评语
2015/01/04 职场文书
开学随笔
2015/08/15 职场文书
小学音乐课教学反思
2016/02/18 职场文书
Docker安装MySql8并远程访问的实现
2022/07/07 Servers