基于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 相关文章推荐
配置支持SSI
Nov 25 PHP
php htmlentities和htmlspecialchars 的区别
Aug 18 PHP
PHP开发负载均衡指南
Jul 17 PHP
封装ThinkPHP的一个文件上传方法实例
Oct 31 PHP
浅谈php7的重大新特性
Oct 23 PHP
PHP扩展迁移为PHP7扩展兼容性问题记录
Feb 15 PHP
PHP Laravel 上传图片、文件等类封装
Aug 16 PHP
详解Yaf框架PHPUnit集成测试方法
Dec 27 PHP
Discuz不使用插件实现简单的打赏功能
Mar 21 PHP
Laravel5.7框架安装与使用学习笔记图文详解
Apr 02 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
Dec 18 PHP
php文件上传原理与实现方法详解
Dec 20 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 自定义错误处理函数trigger_error()
2013/03/26 PHP
php操作redis缓存方法分享
2015/06/03 PHP
PHP+MySQL统计该库中每个表的记录数并按递减顺序排列的方法
2016/02/15 PHP
PHP 5.6.11 访问SQL Server2008R2的几种情况详解
2016/08/08 PHP
PHP入门教程之正则表达式基本用法实例详解(正则匹配,搜索,分割等)
2016/09/11 PHP
调用js时ie6和ie7,ff的区别
2009/08/19 Javascript
JavaScript 设计模式之组合模式解析
2010/04/09 Javascript
js 将json字符串转换为json对象的方法解析
2013/11/13 Javascript
简单时间提示DEMO从0开始一直进行计时
2013/11/19 Javascript
javascript 通用loading动画效果实例代码
2014/01/14 Javascript
JavaScript操作XML/HTML比较常用的对象属性集锦
2015/10/30 Javascript
jQuery控制文本框只能输入数字和字母及使用方法
2016/05/26 Javascript
轻松掌握JavaScript中介者模式
2016/08/26 Javascript
nodejs redis 发布订阅机制封装实现方法及实例代码
2016/12/15 NodeJs
利用jquery实现实时更新歌词的方法
2017/01/06 Javascript
Ionic + Angular.js实现验证码倒计时功能的方法
2017/06/12 Javascript
Angularjs实现上传图片预览功能
2017/09/01 Javascript
JS实现匀加速与匀减速运动的方法示例
2017/09/04 Javascript
JS温故而知新之变量提升和时间死区
2019/01/27 Javascript
微信小程序列表时间戳转换实现过程解析
2019/10/12 Javascript
javascript实现计算器功能
2020/03/30 Javascript
Electron整合React使用搭建开发环境的步骤详解
2020/06/07 Javascript
[00:12]DAC2018 天才少年转战三号位,他的SOLO是否仍如昔日般强大?
2018/04/06 DOTA
python动态监控日志内容的示例
2014/02/16 Python
使用python编写脚本获取手机当前应用apk的信息
2014/07/21 Python
python求众数问题实例
2014/09/26 Python
深入解析Python中的urllib2模块
2015/11/13 Python
深入了解python列表(LIST)
2020/06/08 Python
仓库管理专业个人的自我评价
2013/12/30 职场文书
致百米运动员广播稿
2014/01/29 职场文书
称象教学反思
2014/02/03 职场文书
食品安全工作实施方案
2014/03/26 职场文书
群众路线教育实践活动剖析材料
2014/09/30 职场文书
《七月的天山》教学反思
2016/02/19 职场文书
springboot 多数据源配置不生效遇到的坑及解决
2021/11/17 Java/Android
Nginx跨域问题解析与解决
2022/08/05 Servers