1. 程式人生 > 程式設計 >基於PHP實現解密或加密Cloudflar郵箱保護

基於PHP實現解密或加密Cloudflar郵箱保護

Cloudflare 有一項功能挺不錯的,就是將頁面上所有的郵箱地址都加密起來,防止機器人抓到然後幹壞事。

這項功能要在後臺開啟 email address obfuscation

之後就可以在頁面上加入一個郵箱地址,比如說 [email protected]

檢視原始碼就能發現類似如下的程式碼

<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,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";


得到的結果就是上面所說的 [email protected]

但是我們不想用 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;
}

我們就能利用這個加密演算法,將手機號、郵箱地址、身份證等各種敏感的資訊都加密起來,防止別人能輕易的抓取到資料

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。